diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h b/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +7V1Zd+K4Ev41Oefeh/TxvjwSlpDbYRkgSfe8cBww4G5jM8ZkmV9/Je+WBMjGNg50P6RtYWup+lRVqirJN3xz/XHvaJtVz57r5g3HzD9u+NYNx0kcC/7Cgk+/QJAkv2DpGHO/iI0Lxsa/elDIBKU7Y65vUw+6tm26xiZdOLMtS5+5qTLNcez39GML20y3utGWOlYwnmkmXvpizN2VX6pwUlze1Y3lKmyZlVT/l1dt9nvp2DsraO+G4xfeP//ntRbWFQx0u9Lm9nuiiG/f8E3Htl3/av3R1E1I2pBs/nudPb9G/XZ0y6V5YbP6+/bVXm9s9y9xvdD+ni6Vx1tV9qt508xdQJAXzXDHrmbNXz+DjrufIbG84eqwQuaGv3tfGa4+3mgz+Os7QAcoW7lrE9yx4BLvYNDnN91x9Y9EUdDhe91e664DmmWCXzmV918JwRXQ8j3mFBvSd5XgUvicFoBjGdUcEwhcBDTKQi8Fo4k+B3gKbm3HXdlL29LMdlx6l6ZagkL6h+H+gMXfxODuZ+KX1kfwhnfzGdz80l33M5hG2s61QVHc6qNtb45Rf2vvnJlOgQlXc5a6S/EgpMBBbjq6qbnGW3rGFc4blgnxFYN5sFiYhqXXDsiccm4kswyHUatlbLVXE5Dl7ORiakctgSgoh7qzNtzz0wuTk+cnmIgRbOgAVQoEgbWsHcFE7vwEk4gIG+navH6KWDq7JmYZFaMXrputeQPaiOBuZmrbrTFDFLAFuuJrYFkM73+GahfexErYuwu1cKS5E3o7rGOv6q5AJUdS/ahOTjBOJPAtLKNW3UELQ9sAg4txo6QlOSsiePCHHryVtF6RipB6ZAmpx6cMVg/gvvaZeGwDH9ju7y/LIu2kbGpw4VcYwzai6AlIZnFNPHxsTsftx3ZzAsphESwN7ZsEwMH0ddOQ3rqO/Vtv2qbtgBLLtqAFujBMEynSTGNpwXkBwKiD8jsoDAywLmoEP6yN+dwzX0nSJS1/ChAwCH9pxTFXmnhh+SLFS0q2fONEWvESPBpKmJLESyQ1ijP5qxEvPIOIFzaneGEFBH9oRQXJFzHdjFiJeMEtsfxIZtNIpgZySk+WpSajFeDX05Mqgj9Uv9ECmRPZb2K6KpkOysXhDTdks+ONiBvuMHD2WnPsEZSegjjhiyIOtXQEFCbUolNCKkJ1ckmmmcBWIjxxB+kNJ5nQ6Jobb+ByCS97zeF42mhOpqO7pL3Gh4+CthNPEypo9FvUz3qNNZ9Go2lv0AeF2hpaZNbrduM9z0RFQQVQR2bvxqsTFt4fGVz85P7X4+4e6B6xoqN97nRB/YOnyaCPdJAthfpec712A5LkgXI4+yq/VGOeR8wclWDNizwu2lilPHOeweYxeY3FXC5bWIQtnCzgfKl4lYU7ca6eLTytt7s8tnD4bMlvwmUIbiUsuEzuuPwGXAbPGlsr+w1ZsEp5zTdk4SFRWm+FGVhcEX6WLwG1LKtToc5Yk/M6cRGsyUzVWMODeE1onT6Mp6Onfv+hf4/YjxesdXgxHdGJbLak1pGq1TpFOKq+iCgQqUWB9EcUlCEKinRS1Rxr9C4qsVZY49MYUficWENjh+gqs3Ss4T6k61vkoMw8/xpHKVACJOZ/iWkAdbMLo9BCFM7KG7VAVyElhffRxDKBZw73iyP3q1yfM0fKbMEckcNRezjtDVptRIKU4POE0mrYHvUe0GyEa3d0IrAlZpHxB+Zf8VItbC0HdjLw8w+aqliSCaQlWcVwwlOq7382pgA/3XZjMp089FDxcy3MEUlBjWrXyzyHMQdmjHafYZwN4UPVCaOSnM5CkFlKg6+8hFEe9zR2nxvOug75yCi5RFEO0zjOSDDcXeYRTJ83tp/WrHZEq0HWO4+7sLrPD9YvfeYatlUXsgkpstVgdwWPe2NGnUG/LvRKw4wlWXkV0wv3KHSfJ3AviqW559/txKJ5jnWQ/vhyvw2W9s75icWrKpKyJzL82clFtQZtWHAgY9cDHZWxXgPqctLZqStQrdJSO3G/CnVl5fzUxRctGKXK9e2nPPuJZNQSnPuB5jzu3A9XCzXxHaKBJBWBQ95AEgqrgjyH6PIvbKdcT6CAr/DyIznlo6ZNpc6Y738CkkN8fr09KClgKHkTcUSkIqEkJIvozEPPjTjyfCUucKGIzZ1EEX54D9W+8GyJOwiocR85MGoCfAQXCuroyivBq96vIpKMsQvFGk+NtXpFGi8Ga6WZpvXDGnXaCV+vtJOLwVqRxmPNsUadTsfXOp3u62KtyD3GGVPj8izVT8GaSo01pVZYYwUGddYI4SkHmTd98jzmtBSRukrHHGlr5oViTqHFXChQ6oI5EYWJKueEHIehV+WqRhwpZRBz294Nx9NRu9H6eVP6ZtTGwaauOJNGUlJIkRRCML3aTBqJtMok5kZhDN2b1Hep7BMFhH2kXBuWwL7ycm0k3MCB83z84u9pPzD3BiO8rNd9Bi/7iTqply+VozIvI8Kb5wlTMjyqpqIpSXW2A5ySe5h8LfNR5tO8I53+p1Y7Hak0cYM8ySrJcr2ja5t4ZIa3O+Rnv7k3u/t6NbuMrJgFiaAaSJq9vKMlFNzPApOXxnXIXWIZnv9Wu/QlBU8s3DN7Uf2aYQacPHv3tl1oS2RTgDBOoqRAJBz9i3cUL16bbGFZxI3Gc7RJuJEHsoTJQtqpSpwsnce8Oyqw6khGa6bJU5e++NNr8JxvLX5Sb4Kmm2dreh8PSm77YTx9mDzmazluhmob0b52rliGCZKCrrRos0k5dPtmgUKMaqk1ao/bkyJFB1H10b+Nz6GC7I9ihOr5OkOSqqf05rQOkgTtuXtTIKtO7A4ujs+HG4LM/mN3kmR2FEw7KrPL87EouI8F94Vd8I5PFT03hLC9TCnJ6/X99w/7+z/P7R9dcdnXh9Pb5WJ3i+cOBdvx6upqqHRDHpFkuGsGo1PeEPGxdJYwRBwGhRMJ1KWEiAmpfYdQVJMA8ZkTYDIfQs2gHw6SFQSkp6VDE1lGcpdVjOIsCWBUKD6EzSSG31dPzd1o9P2p9/z4Igxb2r30XjMMSyyCYS4fhlk2XZEsIxUVl99ApD4e4iS5YGmDGJThUeK7VxcfZVkG/W4DKxO9j6QQqVqA85GICNwCrB0i6AJq8Xk3+HH5V2DKolEzNvxI7zFksYxSErSO7C9mQgqC0n928Bu5dwEto/ukm6aYKG+WRqlCPBkqLCNeXKQ/tBwhRx2+RbeHFreowvOyYPR26OhDx8boUvWiSkFO2Ks0eEumV4mZ3nVbUhF2FRzEUE3sUQVxXPB5j2VUkS2pWC5WQasqtJ2ww6Uuqgifqbpg4+aCbWcVNW5kSrO5POOG+NWorEKywK1Xx7YznCIk6Q+gqNe+fRbgBD0ZJvfnI3nk42Qi5RnTWSUlmol55PxarF98FYK1tIOV63dmBfXXY2p2+oqqovnY2BeVqbHPCFhdlF9PzYG4301d1ExnKz++3LblvvHGqi1CYCTUkis21JLkw5Ti38PCTfTCSrdApd7aagIU7x3ck2FsfV0KY81bHVIh+vTfeOgX3ycLGNAg+Ot9NK7xNBnAqkYwMuzasKJvUEUfWqNt0LK4w4PFwjQsPfNgwu0lfs9gCfwGimd6gCkQjcvvYHKk3qdS/A/teUOLhrC/t1EB/Io9BLf2pi9sZw2puHDsNfhvtoXrZGBlwKaNBWxn/Dx9HDRaIblB6wcbSfN4CE/Bc+moUk2vWsZWezWBxUPVpz6kqr2hqxqsUrs6kAPwBFOaytvAqoJCBs5PxhvvbjP3Dm9j8GN9Ief9vWwd/6aRvPFwPxnd+592HLcnCfTjxd4E8N71YROSHFyC9jVPoHm8COgPKZ+B6ZCRlNM6E33j43RpqgbixfGmjrGGHh7mPxtzNgHX/4UDjiegN9UyYig+qJamI5OdAxuzrYCDwcoi6EPQK5/ms5W+TTw1bU3oJnSyiQZVEw3KJpBBR4fNZh14alF1oF/+c3nGnVjyHSEtfIq6CTDsUa+dFDQJcQxaCoQSbM9d+Y/AAxijyrMqklQSQS6cOwvbQoA+6vg4n9nrta9pxq2+Z2bNfnsD8jru6DMdGDHz7LQncTfsRmnsJTaQmb/o1KFoo1E1ho4hJjrS+Irm5WG+7RN5Gdn20P9fuzl5SOmIcqd/4qDlLKxcLFJkaKbp7k/5FKu3/imxDFyzZezsJtnXkjCddPpflymVjbVNhK/haAIu+4xPGB3edCHy/pycpld2TyFX/UFHTIvZkJ2FGBSGAUMDWZJgaaFas4OyNmwQlsD7jnfR6aQVN3Q6H+tCxol8JVBLHcpe+OokOL88s9RGaXqH3cX0b2DUD5CTJjYMBFBjobBAxBaAEi6K+JYY300A+fjWLbcvQGsDwb0wPdfjypjPAf5LiEnsO9044d2TSAdYsEoRge623mkI/7x2P5vfe389q4v2y2vvNtsHLwMKnxiPoHKtfoWQKhZjyhspwEOdZXlKiSDIFpeqEASHt9bXBAUssy8dI7vTXBUqwgExgZbAdkDicXBrO+7KXtqWZrbjUkRInumQyF+6636OjX9hN7UdUNRAoEe9fbQ92R/n3iC4OYrCQ8nGx2M8PlpxcFKjjla+H+om+ctDRe0QwTQggaRZdohw4VEQVeQzEcmGfxTsys51OpGlqpSWY2FItIRjncCtY8OkyVgSgmGtevZch0/8Hw== \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000..f899918 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000..68b2851 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py new file mode 100644 index 0000000..78526fd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + print 'Enter to continue test' + inpval = raw_input() + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 0', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc new file mode 100644 index 0000000..05b88d6 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py new file mode 100644 index 0000000..cf99a15 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py @@ -0,0 +1,28 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby +import test_setup_rup_confirm + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup_rup_confirm.test_setup() +#test_setup.test_setup() +#test_setup_hw.test_setup() + + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py new file mode 100644 index 0000000..ff47dc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc new file mode 100644 index 0000000..e99d4b3 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py new file mode 100644 index 0000000..190c39c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py @@ -0,0 +1,93 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #temporary commentout 2 lines + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + #res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) #PLC Interlock + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) #cRIO Interlock + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc new file mode 100644 index 0000000..67d714d Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000..b3a9917 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000..bc74300 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py new file mode 100644 index 0000000..6305e40 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '4. Set FHPS rampup parameter and start it.' + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + print 'Enter to continue test' + inpval = raw_input() + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc new file mode 100644 index 0000000..b19006e Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc differ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py new file mode 100644 index 0000000..ebf5a71 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_sync(): + """Test Sync Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + print '5. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '6. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '7. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '8. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print '9. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' + +def test_sync_prepro(): + """Test Sync PrePro Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '5. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '6. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '7. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '8. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '9. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '10.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '11. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc new file mode 100644 index 0000000..3637b06 Binary files /dev/null and b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc differ diff --git a/EC-GN-JA-PCF/.svn/entries b/EC-GN-JA-PCF/.svn/entries new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/entries @@ -0,0 +1 @@ +12 diff --git a/EC-GN-JA-PCF/.svn/format b/EC-GN-JA-PCF/.svn/format new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/format @@ -0,0 +1 @@ +12 diff --git a/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base b/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base new file mode 100644 index 0000000..7202e19 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:59:51 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base b/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base b/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base b/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base new file mode 100644 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base b/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base new file mode 100644 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base b/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base b/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base new file mode 100644 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base b/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base b/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base b/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base new file mode 100644 index 0000000..a31f134 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base b/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base new file mode 100644 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base new file mode 100644 index 0000000..06c6d8d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:51:08 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base new file mode 100644 index 0000000..9749067 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base b/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base b/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base new file mode 100644 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base b/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base new file mode 100644 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base b/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base b/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base b/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base new file mode 100644 index 0000000..da9dab1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À¹Z°Ï, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base b/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base b/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base new file mode 100644 index 0000000..8e9a7a7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base b/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base b/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base new file mode 100644 index 0000000..c1cfdd2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À GäY, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base b/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base b/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base b/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base new file mode 100644 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base b/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base new file mode 100644 index 0000000..6305e40 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '4. Set FHPS rampup parameter and start it.' + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + print 'Enter to continue test' + inpval = raw_input() + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base b/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base new file mode 100644 index 0000000..8233fb0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base b/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base b/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base b/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base b/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base b/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base new file mode 100644 index 0000000..5c6175c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base @@ -0,0 +1,35 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *SharedTemplateApp dirs +$(foreach dir, $(filter-out %SharedTemplateApp, $(filter %App, $(DIRS))), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %SharedTemplateApp, $(DIRS)))) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base b/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base new file mode 100644 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base b/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base b/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base b/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base b/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base new file mode 100644 index 0000000..a91120e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base b/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base b/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base b/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base new file mode 100644 index 0000000..926c122 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base @@ -0,0 +1,87 @@ + + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base b/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base b/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base new file mode 100644 index 0000000..0beb994 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base b/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base b/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base new file mode 100644 index 0000000..032baf6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base b/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base b/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base b/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base b/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base new file mode 100644 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base b/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base b/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base new file mode 100644 index 0000000..983ab3d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base b/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base new file mode 100644 index 0000000..190c39c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base @@ -0,0 +1,93 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #temporary commentout 2 lines + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + #res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) #PLC Interlock + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) #cRIO Interlock + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base new file mode 100644 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base b/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base new file mode 100644 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base b/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base b/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base b/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base new file mode 100644 index 0000000..1f40d18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base b/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base b/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +
The connection for configuration and state to 4110 was broken or the frame is not correct
+
+ +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+
+ +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base new file mode 100644 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base b/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base new file mode 100644 index 0000000..ebf5a71 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_sync(): + """Test Sync Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + print '5. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '6. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '7. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '8. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print '9. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' + +def test_sync_prepro(): + """Test Sync PrePro Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '5. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '6. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '7. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '8. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '9. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '10.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '11. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base new file mode 100644 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base b/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base b/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base new file mode 100644 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base new file mode 100644 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base b/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base new file mode 100644 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base new file mode 100644 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base new file mode 100644 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base new file mode 100644 index 0000000..f5f01cc --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base b/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base @@ -0,0 +1 @@ +7V1Zd+K4Ev41Oefeh/TxvjwSlpDbYRkgSfe8cBww4G5jM8ZkmV9/Je+WBMjGNg50P6RtYWup+lRVqirJN3xz/XHvaJtVz57r5g3HzD9u+NYNx0kcC/7Cgk+/QJAkv2DpGHO/iI0Lxsa/elDIBKU7Y65vUw+6tm26xiZdOLMtS5+5qTLNcez39GML20y3utGWOlYwnmkmXvpizN2VX6pwUlze1Y3lKmyZlVT/l1dt9nvp2DsraO+G4xfeP//ntRbWFQx0u9Lm9nuiiG/f8E3Htl3/av3R1E1I2pBs/nudPb9G/XZ0y6V5YbP6+/bVXm9s9y9xvdD+ni6Vx1tV9qt508xdQJAXzXDHrmbNXz+DjrufIbG84eqwQuaGv3tfGa4+3mgz+Os7QAcoW7lrE9yx4BLvYNDnN91x9Y9EUdDhe91e664DmmWCXzmV918JwRXQ8j3mFBvSd5XgUvicFoBjGdUcEwhcBDTKQi8Fo4k+B3gKbm3HXdlL29LMdlx6l6ZagkL6h+H+gMXfxODuZ+KX1kfwhnfzGdz80l33M5hG2s61QVHc6qNtb45Rf2vvnJlOgQlXc5a6S/EgpMBBbjq6qbnGW3rGFc4blgnxFYN5sFiYhqXXDsiccm4kswyHUatlbLVXE5Dl7ORiakctgSgoh7qzNtzz0wuTk+cnmIgRbOgAVQoEgbWsHcFE7vwEk4gIG+navH6KWDq7JmYZFaMXrputeQPaiOBuZmrbrTFDFLAFuuJrYFkM73+GahfexErYuwu1cKS5E3o7rGOv6q5AJUdS/ahOTjBOJPAtLKNW3UELQ9sAg4txo6QlOSsiePCHHryVtF6RipB6ZAmpx6cMVg/gvvaZeGwDH9ju7y/LIu2kbGpw4VcYwzai6AlIZnFNPHxsTsftx3ZzAsphESwN7ZsEwMH0ddOQ3rqO/Vtv2qbtgBLLtqAFujBMEynSTGNpwXkBwKiD8jsoDAywLmoEP6yN+dwzX0nSJS1/ChAwCH9pxTFXmnhh+SLFS0q2fONEWvESPBpKmJLESyQ1ijP5qxEvPIOIFzaneGEFBH9oRQXJFzHdjFiJeMEtsfxIZtNIpgZySk+WpSajFeDX05Mqgj9Uv9ECmRPZb2K6KpkOysXhDTdks+ONiBvuMHD2WnPsEZSegjjhiyIOtXQEFCbUolNCKkJ1ckmmmcBWIjxxB+kNJ5nQ6Jobb+ByCS97zeF42mhOpqO7pL3Gh4+CthNPEypo9FvUz3qNNZ9Go2lv0AeF2hpaZNbrduM9z0RFQQVQR2bvxqsTFt4fGVz85P7X4+4e6B6xoqN97nRB/YOnyaCPdJAthfpec712A5LkgXI4+yq/VGOeR8wclWDNizwu2lilPHOeweYxeY3FXC5bWIQtnCzgfKl4lYU7ca6eLTytt7s8tnD4bMlvwmUIbiUsuEzuuPwGXAbPGlsr+w1ZsEp5zTdk4SFRWm+FGVhcEX6WLwG1LKtToc5Yk/M6cRGsyUzVWMODeE1onT6Mp6Onfv+hf4/YjxesdXgxHdGJbLak1pGq1TpFOKq+iCgQqUWB9EcUlCEKinRS1Rxr9C4qsVZY49MYUficWENjh+gqs3Ss4T6k61vkoMw8/xpHKVACJOZ/iWkAdbMLo9BCFM7KG7VAVyElhffRxDKBZw73iyP3q1yfM0fKbMEckcNRezjtDVptRIKU4POE0mrYHvUe0GyEa3d0IrAlZpHxB+Zf8VItbC0HdjLw8w+aqliSCaQlWcVwwlOq7382pgA/3XZjMp089FDxcy3MEUlBjWrXyzyHMQdmjHafYZwN4UPVCaOSnM5CkFlKg6+8hFEe9zR2nxvOug75yCi5RFEO0zjOSDDcXeYRTJ83tp/WrHZEq0HWO4+7sLrPD9YvfeYatlUXsgkpstVgdwWPe2NGnUG/LvRKw4wlWXkV0wv3KHSfJ3AviqW559/txKJ5jnWQ/vhyvw2W9s75icWrKpKyJzL82clFtQZtWHAgY9cDHZWxXgPqctLZqStQrdJSO3G/CnVl5fzUxRctGKXK9e2nPPuJZNQSnPuB5jzu3A9XCzXxHaKBJBWBQ95AEgqrgjyH6PIvbKdcT6CAr/DyIznlo6ZNpc6Y738CkkN8fr09KClgKHkTcUSkIqEkJIvozEPPjTjyfCUucKGIzZ1EEX54D9W+8GyJOwiocR85MGoCfAQXCuroyivBq96vIpKMsQvFGk+NtXpFGi8Ga6WZpvXDGnXaCV+vtJOLwVqRxmPNsUadTsfXOp3u62KtyD3GGVPj8izVT8GaSo01pVZYYwUGddYI4SkHmTd98jzmtBSRukrHHGlr5oViTqHFXChQ6oI5EYWJKueEHIehV+WqRhwpZRBz294Nx9NRu9H6eVP6ZtTGwaauOJNGUlJIkRRCML3aTBqJtMok5kZhDN2b1Hep7BMFhH2kXBuWwL7ycm0k3MCB83z84u9pPzD3BiO8rNd9Bi/7iTqply+VozIvI8Kb5wlTMjyqpqIpSXW2A5ySe5h8LfNR5tO8I53+p1Y7Hak0cYM8ySrJcr2ja5t4ZIa3O+Rnv7k3u/t6NbuMrJgFiaAaSJq9vKMlFNzPApOXxnXIXWIZnv9Wu/QlBU8s3DN7Uf2aYQacPHv3tl1oS2RTgDBOoqRAJBz9i3cUL16bbGFZxI3Gc7RJuJEHsoTJQtqpSpwsnce8Oyqw6khGa6bJU5e++NNr8JxvLX5Sb4Kmm2dreh8PSm77YTx9mDzmazluhmob0b52rliGCZKCrrRos0k5dPtmgUKMaqk1ao/bkyJFB1H10b+Nz6GC7I9ihOr5OkOSqqf05rQOkgTtuXtTIKtO7A4ujs+HG4LM/mN3kmR2FEw7KrPL87EouI8F94Vd8I5PFT03hLC9TCnJ6/X99w/7+z/P7R9dcdnXh9Pb5WJ3i+cOBdvx6upqqHRDHpFkuGsGo1PeEPGxdJYwRBwGhRMJ1KWEiAmpfYdQVJMA8ZkTYDIfQs2gHw6SFQSkp6VDE1lGcpdVjOIsCWBUKD6EzSSG31dPzd1o9P2p9/z4Igxb2r30XjMMSyyCYS4fhlk2XZEsIxUVl99ApD4e4iS5YGmDGJThUeK7VxcfZVkG/W4DKxO9j6QQqVqA85GICNwCrB0i6AJq8Xk3+HH5V2DKolEzNvxI7zFksYxSErSO7C9mQgqC0n928Bu5dwEto/ukm6aYKG+WRqlCPBkqLCNeXKQ/tBwhRx2+RbeHFreowvOyYPR26OhDx8boUvWiSkFO2Ks0eEumV4mZ3nVbUhF2FRzEUE3sUQVxXPB5j2VUkS2pWC5WQasqtJ2ww6Uuqgifqbpg4+aCbWcVNW5kSrO5POOG+NWorEKywK1Xx7YznCIk6Q+gqNe+fRbgBD0ZJvfnI3nk42Qi5RnTWSUlmol55PxarF98FYK1tIOV63dmBfXXY2p2+oqqovnY2BeVqbHPCFhdlF9PzYG4301d1ExnKz++3LblvvHGqi1CYCTUkis21JLkw5Ti38PCTfTCSrdApd7aagIU7x3ck2FsfV0KY81bHVIh+vTfeOgX3ycLGNAg+Ot9NK7xNBnAqkYwMuzasKJvUEUfWqNt0LK4w4PFwjQsPfNgwu0lfs9gCfwGimd6gCkQjcvvYHKk3qdS/A/teUOLhrC/t1EB/Io9BLf2pi9sZw2puHDsNfhvtoXrZGBlwKaNBWxn/Dx9HDRaIblB6wcbSfN4CE/Bc+moUk2vWsZWezWBxUPVpz6kqr2hqxqsUrs6kAPwBFOaytvAqoJCBs5PxhvvbjP3Dm9j8GN9Ief9vWwd/6aRvPFwPxnd+592HLcnCfTjxd4E8N71YROSHFyC9jVPoHm8COgPKZ+B6ZCRlNM6E33j43RpqgbixfGmjrGGHh7mPxtzNgHX/4UDjiegN9UyYig+qJamI5OdAxuzrYCDwcoi6EPQK5/ms5W+TTw1bU3oJnSyiQZVEw3KJpBBR4fNZh14alF1oF/+c3nGnVjyHSEtfIq6CTDsUa+dFDQJcQxaCoQSbM9d+Y/AAxijyrMqklQSQS6cOwvbQoA+6vg4n9nrta9pxq2+Z2bNfnsD8jru6DMdGDHz7LQncTfsRmnsJTaQmb/o1KFoo1E1ho4hJjrS+Irm5WG+7RN5Gdn20P9fuzl5SOmIcqd/4qDlLKxcLFJkaKbp7k/5FKu3/imxDFyzZezsJtnXkjCddPpflymVjbVNhK/haAIu+4xPGB3edCHy/pycpld2TyFX/UFHTIvZkJ2FGBSGAUMDWZJgaaFas4OyNmwQlsD7jnfR6aQVN3Q6H+tCxol8JVBLHcpe+OokOL88s9RGaXqH3cX0b2DUD5CTJjYMBFBjobBAxBaAEi6K+JYY300A+fjWLbcvQGsDwb0wPdfjypjPAf5LiEnsO9044d2TSAdYsEoRge623mkI/7x2P5vfe389q4v2y2vvNtsHLwMKnxiPoHKtfoWQKhZjyhspwEOdZXlKiSDIFpeqEASHt9bXBAUssy8dI7vTXBUqwgExgZbAdkDicXBrO+7KXtqWZrbjUkRInumQyF+6636OjX9hN7UdUNRAoEe9fbQ92R/n3iC4OYrCQ8nGx2M8PlpxcFKjjla+H+om+ctDRe0QwTQggaRZdohw4VEQVeQzEcmGfxTsys51OpGlqpSWY2FItIRjncCtY8OkyVgSgmGtevZch0/8Hw== \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base b/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base new file mode 100644 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base b/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base new file mode 100644 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base b/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base new file mode 100644 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base b/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base new file mode 100644 index 0000000..dbc6b1e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=Àéï=é, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base b/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base b/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base new file mode 100644 index 0000000..256fd18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:53:47 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base b/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base new file mode 100644 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base new file mode 100644 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base new file mode 100644 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base new file mode 100644 index 0000000..2742db7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +make -f Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base b/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base b/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base new file mode 100644 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base b/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base b/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base new file mode 100644 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base b/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base b/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base b/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base b/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base b/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base new file mode 100644 index 0000000..a20f095 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base new file mode 100644 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base b/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base new file mode 100644 index 0000000..ba3363d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base new file mode 100644 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base b/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base b/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base new file mode 100644 index 0000000..fed3a3b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base b/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base b/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base new file mode 100644 index 0000000..5293c3f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base @@ -0,0 +1,134 @@ +#+====================================================================== +# $HeadURL: $ +# $Id: $ +# +# Project : ITER I&C Integration +# +# Description : SPEC file for packaging CS-Studio related file artefacts +# +# Author(s) : Bertrand Bauvir (IO) +# +# Copyright (c) : 2010-2021 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +%define __spec_install_post %{nil} + +Name: iter-icint-%{project_artifactId} +Version: %{project_version} +Release: %{?rpm_release_num:%{rpm_release_num}}%{!?rpm_release_num:1} +Summary: %{project_description} + +Group: Development/CODAC +Distribution: I&C Applications +#URL: http://www.iter.org/org/team/chd/cid/codac +URL: %{?rpm_vcs_url:%{rpm_vcs_url}}%{!?rpm_vcs_url:undefined} +Vendor: ITER Organization +Packager: ITER Organization +License: ITER License + +Source0: src.tar.gz + +BuildArch: noarch +AutoReq: no + +%provides_self + +%description +%{project_description}. + +%package -n %subpackage opi +Summary: %{project_description} - OPI resources +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage opi + +%description -n %subpackage opi +%{project_description} - OPI resources. + +%package -n %subpackage alarm +Summary: %{project_description} - Alarm configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage alarm + +%description -n %subpackage alarm +%{project_description} - Alarm configuration. + +%package -n %subpackage archive +Summary: %{project_description} - Archive configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage archive + +%description -n %subpackage archive +%{project_description} - Archive configuration. + +%prep +%setup -T -c -a 0 + +%build + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId} +install -d %{buildroot}/opt/codac/opi/%{project_artifactId} +cp -r src/main/boy %{buildroot}/opt/codac/opi/%{project_artifactId} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId}/epics +cp -r src/main/epics/*App %{buildroot}/opt/codac/opi/%{project_artifactId}/epics || : +mkdir -p %{buildroot}/etc/opt/codac/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} + +%clean + +%files + +%files -n %subpackage opi +/opt/codac/opi/* + +%files -n %subpackage alarm +/etc/opt/codac/%{project_artifactId}/*beast.xml +/etc/opt/codac/css/beast/%{project_artifactId}/*beast.xml + +%files -n %subpackage archive +/etc/opt/codac/%{project_artifactId}/*beauty.xml +/etc/opt/codac/css/beauty/%{project_artifactId}/*beauty.xml + +%pretrans +%beginlog_pretrans +%endlog + +%posttrans +%beginlog_posttrans +%endlog + +%preun +%beginlog_preun +%endlog + +%postun +%beginlog_postun +%endlog + +%changelog +* Wed Mar 31 2021 Bertrand Bauvir +- Initial version. diff --git a/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base b/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base new file mode 100644 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base b/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base new file mode 100644 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base b/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base new file mode 100644 index 0000000..c809458 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base b/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base b/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base b/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base new file mode 100644 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base b/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base b/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base b/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base b/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base new file mode 100644 index 0000000..ffd24ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base b/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base b/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base b/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base new file mode 100644 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base new file mode 100644 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base b/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base new file mode 100644 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base new file mode 100644 index 0000000..988dfd2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À‰n‰ü~, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base new file mode 100644 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base b/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base b/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base b/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base b/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base new file mode 100644 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base b/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base b/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base new file mode 100644 index 0000000..53595f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 14:02:23 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base b/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base b/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base b/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base b/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base new file mode 100644 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base b/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base b/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base new file mode 100644 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base b/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base b/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base new file mode 100644 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base b/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base new file mode 100644 index 0000000..31d6c69 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 13:52:12 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base new file mode 100644 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base b/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base new file mode 100644 index 0000000..e8a3e8b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +make -f Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base b/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base b/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base b/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base new file mode 100644 index 0000000..d0f8af2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À¹é¯ñ, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base b/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base b/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base b/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base new file mode 100644 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base b/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base new file mode 100644 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base b/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base b/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base new file mode 100644 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base b/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base new file mode 100644 index 0000000..ff47dc4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base b/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base new file mode 100644 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base b/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base new file mode 100644 index 0000000..d889bf8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base b/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base b/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base b/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base new file mode 100644 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base b/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base b/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base b/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base new file mode 100644 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base b/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base b/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base new file mode 100644 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base b/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base new file mode 100644 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base new file mode 100644 index 0000000..501ad2c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base new file mode 100644 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base b/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base b/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base new file mode 100644 index 0000000..1be9058 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base new file mode 100644 index 0000000..09162c9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base new file mode 100644 index 0000000..c0544f2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:43:02 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base b/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base b/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base new file mode 100644 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base b/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base new file mode 100644 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base b/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base b/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base b/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base new file mode 100644 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base b/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base b/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base b/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base b/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base new file mode 100644 index 0000000..6d3bf93 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base b/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base b/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base b/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base b/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base new file mode 100644 index 0000000..4d784c4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=ÀYØ4¾, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base b/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base b/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base b/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base new file mode 100644 index 0000000..78526fd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + print 'Enter to continue test' + inpval = raw_input() + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 0', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base b/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base new file mode 100644 index 0000000..b716b6d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base b/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base b/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base b/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base b/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base b/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base b/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base new file mode 100644 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base b/EC-GN-JA-PCF/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base b/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base b/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base b/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base new file mode 100644 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base new file mode 100644 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base b/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base b/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base new file mode 100644 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base b/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base new file mode 100644 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base new file mode 100644 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base b/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base b/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base b/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base new file mode 100644 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base b/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base b/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base b/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base new file mode 100644 index 0000000..cf9e32c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base b/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base b/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base b/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base new file mode 100644 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base b/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base new file mode 100644 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base b/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base new file mode 100644 index 0000000..475274d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base b/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base new file mode 100644 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base b/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base new file mode 100644 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base b/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base new file mode 100644 index 0000000..cf99a15 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base @@ -0,0 +1,28 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby +import test_setup_rup_confirm + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup_rup_confirm.test_setup() +#test_setup.test_setup() +#test_setup_hw.test_setup() + + diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base new file mode 100644 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base b/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base b/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base b/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base b/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base new file mode 100644 index 0000000..0973323 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 13:54:39 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base new file mode 100644 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base new file mode 100644 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base b/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base new file mode 100644 index 0000000..5ed5d9a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base new file mode 100644 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base new file mode 100644 index 0000000..5ea32f6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/wc.db b/EC-GN-JA-PCF/.svn/wc.db new file mode 100644 index 0000000..7e0fbe8 Binary files /dev/null and b/EC-GN-JA-PCF/.svn/wc.db differ diff --git a/EC-GN-JA-PCF/info.log b/EC-GN-JA-PCF/info.log new file mode 100644 index 0000000..7202e19 --- /dev/null +++ b/EC-GN-JA-PCF/info.log @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:59:51 UTC 2025 diff --git a/EC-GN-JA-PCF/pom.xml b/EC-GN-JA-PCF/pom.xml new file mode 100755 index 0000000..926c122 --- /dev/null +++ b/EC-GN-JA-PCF/pom.xml @@ -0,0 +1,87 @@ + + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml b/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml new file mode 100755 index 0000000..926c122 --- /dev/null +++ b/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml @@ -0,0 +1,87 @@ + + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/sdd.xml b/EC-GN-JA-PCF/sdd.xml new file mode 100755 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/sdd.xml @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml b/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml new file mode 100755 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/src/main/beast/EC-beast.xml b/EC-GN-JA-PCF/src/main/beast/EC-beast.xml new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/beast/EC-beast.xml @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +
The connection for configuration and state to 4110 was broken or the frame is not correct
+
+ +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+
+ +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml b/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml new file mode 100755 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml new file mode 100755 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml new file mode 100755 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml new file mode 100755 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml new file mode 100755 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml new file mode 100755 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml new file mode 100755 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml new file mode 100755 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml new file mode 100755 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml new file mode 100755 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml new file mode 100755 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml new file mode 100755 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml new file mode 100755 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml new file mode 100755 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml new file mode 100755 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml new file mode 100755 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml new file mode 100755 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml new file mode 100755 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml new file mode 100755 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml new file mode 100755 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml new file mode 100755 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml new file mode 100755 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml new file mode 100755 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml new file mode 100755 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml new file mode 100755 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi new file mode 100755 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi new file mode 100755 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi new file mode 100755 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi new file mode 100755 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi new file mode 100755 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/src/main/c++/Makefile b/EC-GN-JA-PCF/src/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h b/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc b/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile new file mode 100755 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile new file mode 100755 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/Makefile b/EC-GN-JA-PCF/src/main/epics/Makefile new file mode 100644 index 0000000..5c6175c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/Makefile @@ -0,0 +1,35 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *SharedTemplateApp dirs +$(foreach dir, $(filter-out %SharedTemplateApp, $(filter %App, $(DIRS))), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %SharedTemplateApp, $(DIRS)))) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc b/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/configure/CONFIG b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/src/main/epics/configure/Makefile b/EC-GN-JA-PCF/src/main/epics/configure/Makefile new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES b/EC-GN-JA-PCF/src/main/epics/configure/RULES new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc b/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS b/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP b/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd new file mode 100755 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem new file mode 100755 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd new file mode 100755 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd new file mode 100755 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem new file mode 100755 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd new file mode 100755 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd new file mode 100755 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem new file mode 100755 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd new file mode 100755 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd new file mode 100755 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd new file mode 100755 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +7V1Zd+K4Ev41Oefeh/TxvjwSlpDbYRkgSfe8cBww4G5jM8ZkmV9/Je+WBMjGNg50P6RtYWup+lRVqirJN3xz/XHvaJtVz57r5g3HzD9u+NYNx0kcC/7Cgk+/QJAkv2DpGHO/iI0Lxsa/elDIBKU7Y65vUw+6tm26xiZdOLMtS5+5qTLNcez39GML20y3utGWOlYwnmkmXvpizN2VX6pwUlze1Y3lKmyZlVT/l1dt9nvp2DsraO+G4xfeP//ntRbWFQx0u9Lm9nuiiG/f8E3Htl3/av3R1E1I2pBs/nudPb9G/XZ0y6V5YbP6+/bVXm9s9y9xvdD+ni6Vx1tV9qt508xdQJAXzXDHrmbNXz+DjrufIbG84eqwQuaGv3tfGa4+3mgz+Os7QAcoW7lrE9yx4BLvYNDnN91x9Y9EUdDhe91e664DmmWCXzmV918JwRXQ8j3mFBvSd5XgUvicFoBjGdUcEwhcBDTKQi8Fo4k+B3gKbm3HXdlL29LMdlx6l6ZagkL6h+H+gMXfxODuZ+KX1kfwhnfzGdz80l33M5hG2s61QVHc6qNtb45Rf2vvnJlOgQlXc5a6S/EgpMBBbjq6qbnGW3rGFc4blgnxFYN5sFiYhqXXDsiccm4kswyHUatlbLVXE5Dl7ORiakctgSgoh7qzNtzz0wuTk+cnmIgRbOgAVQoEgbWsHcFE7vwEk4gIG+navH6KWDq7JmYZFaMXrputeQPaiOBuZmrbrTFDFLAFuuJrYFkM73+GahfexErYuwu1cKS5E3o7rGOv6q5AJUdS/ahOTjBOJPAtLKNW3UELQ9sAg4txo6QlOSsiePCHHryVtF6RipB6ZAmpx6cMVg/gvvaZeGwDH9ju7y/LIu2kbGpw4VcYwzai6AlIZnFNPHxsTsftx3ZzAsphESwN7ZsEwMH0ddOQ3rqO/Vtv2qbtgBLLtqAFujBMEynSTGNpwXkBwKiD8jsoDAywLmoEP6yN+dwzX0nSJS1/ChAwCH9pxTFXmnhh+SLFS0q2fONEWvESPBpKmJLESyQ1ijP5qxEvPIOIFzaneGEFBH9oRQXJFzHdjFiJeMEtsfxIZtNIpgZySk+WpSajFeDX05Mqgj9Uv9ECmRPZb2K6KpkOysXhDTdks+ONiBvuMHD2WnPsEZSegjjhiyIOtXQEFCbUolNCKkJ1ckmmmcBWIjxxB+kNJ5nQ6Jobb+ByCS97zeF42mhOpqO7pL3Gh4+CthNPEypo9FvUz3qNNZ9Go2lv0AeF2hpaZNbrduM9z0RFQQVQR2bvxqsTFt4fGVz85P7X4+4e6B6xoqN97nRB/YOnyaCPdJAthfpec712A5LkgXI4+yq/VGOeR8wclWDNizwu2lilPHOeweYxeY3FXC5bWIQtnCzgfKl4lYU7ca6eLTytt7s8tnD4bMlvwmUIbiUsuEzuuPwGXAbPGlsr+w1ZsEp5zTdk4SFRWm+FGVhcEX6WLwG1LKtToc5Yk/M6cRGsyUzVWMODeE1onT6Mp6Onfv+hf4/YjxesdXgxHdGJbLak1pGq1TpFOKq+iCgQqUWB9EcUlCEKinRS1Rxr9C4qsVZY49MYUficWENjh+gqs3Ss4T6k61vkoMw8/xpHKVACJOZ/iWkAdbMLo9BCFM7KG7VAVyElhffRxDKBZw73iyP3q1yfM0fKbMEckcNRezjtDVptRIKU4POE0mrYHvUe0GyEa3d0IrAlZpHxB+Zf8VItbC0HdjLw8w+aqliSCaQlWcVwwlOq7382pgA/3XZjMp089FDxcy3MEUlBjWrXyzyHMQdmjHafYZwN4UPVCaOSnM5CkFlKg6+8hFEe9zR2nxvOug75yCi5RFEO0zjOSDDcXeYRTJ83tp/WrHZEq0HWO4+7sLrPD9YvfeYatlUXsgkpstVgdwWPe2NGnUG/LvRKw4wlWXkV0wv3KHSfJ3AviqW559/txKJ5jnWQ/vhyvw2W9s75icWrKpKyJzL82clFtQZtWHAgY9cDHZWxXgPqctLZqStQrdJSO3G/CnVl5fzUxRctGKXK9e2nPPuJZNQSnPuB5jzu3A9XCzXxHaKBJBWBQ95AEgqrgjyH6PIvbKdcT6CAr/DyIznlo6ZNpc6Y738CkkN8fr09KClgKHkTcUSkIqEkJIvozEPPjTjyfCUucKGIzZ1EEX54D9W+8GyJOwiocR85MGoCfAQXCuroyivBq96vIpKMsQvFGk+NtXpFGi8Ga6WZpvXDGnXaCV+vtJOLwVqRxmPNsUadTsfXOp3u62KtyD3GGVPj8izVT8GaSo01pVZYYwUGddYI4SkHmTd98jzmtBSRukrHHGlr5oViTqHFXChQ6oI5EYWJKueEHIehV+WqRhwpZRBz294Nx9NRu9H6eVP6ZtTGwaauOJNGUlJIkRRCML3aTBqJtMok5kZhDN2b1Hep7BMFhH2kXBuWwL7ycm0k3MCB83z84u9pPzD3BiO8rNd9Bi/7iTqply+VozIvI8Kb5wlTMjyqpqIpSXW2A5ySe5h8LfNR5tO8I53+p1Y7Hak0cYM8ySrJcr2ja5t4ZIa3O+Rnv7k3u/t6NbuMrJgFiaAaSJq9vKMlFNzPApOXxnXIXWIZnv9Wu/QlBU8s3DN7Uf2aYQacPHv3tl1oS2RTgDBOoqRAJBz9i3cUL16bbGFZxI3Gc7RJuJEHsoTJQtqpSpwsnce8Oyqw6khGa6bJU5e++NNr8JxvLX5Sb4Kmm2dreh8PSm77YTx9mDzmazluhmob0b52rliGCZKCrrRos0k5dPtmgUKMaqk1ao/bkyJFB1H10b+Nz6GC7I9ihOr5OkOSqqf05rQOkgTtuXtTIKtO7A4ujs+HG4LM/mN3kmR2FEw7KrPL87EouI8F94Vd8I5PFT03hLC9TCnJ6/X99w/7+z/P7R9dcdnXh9Pb5WJ3i+cOBdvx6upqqHRDHpFkuGsGo1PeEPGxdJYwRBwGhRMJ1KWEiAmpfYdQVJMA8ZkTYDIfQs2gHw6SFQSkp6VDE1lGcpdVjOIsCWBUKD6EzSSG31dPzd1o9P2p9/z4Igxb2r30XjMMSyyCYS4fhlk2XZEsIxUVl99ApD4e4iS5YGmDGJThUeK7VxcfZVkG/W4DKxO9j6QQqVqA85GICNwCrB0i6AJq8Xk3+HH5V2DKolEzNvxI7zFksYxSErSO7C9mQgqC0n928Bu5dwEto/ukm6aYKG+WRqlCPBkqLCNeXKQ/tBwhRx2+RbeHFreowvOyYPR26OhDx8boUvWiSkFO2Ks0eEumV4mZ3nVbUhF2FRzEUE3sUQVxXPB5j2VUkS2pWC5WQasqtJ2ww6Uuqgifqbpg4+aCbWcVNW5kSrO5POOG+NWorEKywK1Xx7YznCIk6Q+gqNe+fRbgBD0ZJvfnI3nk42Qi5RnTWSUlmol55PxarF98FYK1tIOV63dmBfXXY2p2+oqqovnY2BeVqbHPCFhdlF9PzYG4301d1ExnKz++3LblvvHGqi1CYCTUkis21JLkw5Ti38PCTfTCSrdApd7aagIU7x3ck2FsfV0KY81bHVIh+vTfeOgX3ycLGNAg+Ot9NK7xNBnAqkYwMuzasKJvUEUfWqNt0LK4w4PFwjQsPfNgwu0lfs9gCfwGimd6gCkQjcvvYHKk3qdS/A/teUOLhrC/t1EB/Io9BLf2pi9sZw2puHDsNfhvtoXrZGBlwKaNBWxn/Dx9HDRaIblB6wcbSfN4CE/Bc+moUk2vWsZWezWBxUPVpz6kqr2hqxqsUrs6kAPwBFOaytvAqoJCBs5PxhvvbjP3Dm9j8GN9Ief9vWwd/6aRvPFwPxnd+592HLcnCfTjxd4E8N71YROSHFyC9jVPoHm8COgPKZ+B6ZCRlNM6E33j43RpqgbixfGmjrGGHh7mPxtzNgHX/4UDjiegN9UyYig+qJamI5OdAxuzrYCDwcoi6EPQK5/ms5W+TTw1bU3oJnSyiQZVEw3KJpBBR4fNZh14alF1oF/+c3nGnVjyHSEtfIq6CTDsUa+dFDQJcQxaCoQSbM9d+Y/AAxijyrMqklQSQS6cOwvbQoA+6vg4n9nrta9pxq2+Z2bNfnsD8jru6DMdGDHz7LQncTfsRmnsJTaQmb/o1KFoo1E1ho4hJjrS+Irm5WG+7RN5Gdn20P9fuzl5SOmIcqd/4qDlLKxcLFJkaKbp7k/5FKu3/imxDFyzZezsJtnXkjCddPpflymVjbVNhK/haAIu+4xPGB3edCHy/pycpld2TyFX/UFHTIvZkJ2FGBSGAUMDWZJgaaFas4OyNmwQlsD7jnfR6aQVN3Q6H+tCxol8JVBLHcpe+OokOL88s9RGaXqH3cX0b2DUD5CTJjYMBFBjobBAxBaAEi6K+JYY300A+fjWLbcvQGsDwb0wPdfjypjPAf5LiEnsO9044d2TSAdYsEoRge623mkI/7x2P5vfe389q4v2y2vvNtsHLwMKnxiPoHKtfoWQKhZjyhspwEOdZXlKiSDIFpeqEASHt9bXBAUssy8dI7vTXBUqwgExgZbAdkDicXBrO+7KXtqWZrbjUkRInumQyF+6636OjX9hN7UdUNRAoEe9fbQ92R/n3iC4OYrCQ8nGx2M8PlpxcFKjjla+H+om+ctDRe0QwTQggaRZdohw4VEQVeQzEcmGfxTsys51OpGlqpSWY2FItIRjncCtY8OkyVgSgmGtevZch0/8Hw== \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000..f899918 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000..68b2851 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py new file mode 100644 index 0000000..78526fd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + print 'Enter to continue test' + inpval = raw_input() + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 0', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc new file mode 100644 index 0000000..05b88d6 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py new file mode 100644 index 0000000..cf99a15 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py @@ -0,0 +1,28 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby +import test_setup_rup_confirm + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup_rup_confirm.test_setup() +#test_setup.test_setup() +#test_setup_hw.test_setup() + + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py new file mode 100644 index 0000000..ff47dc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc new file mode 100644 index 0000000..e99d4b3 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py new file mode 100644 index 0000000..190c39c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py @@ -0,0 +1,93 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #temporary commentout 2 lines + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + #res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) #PLC Interlock + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) #cRIO Interlock + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc new file mode 100644 index 0000000..67d714d Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000..b3a9917 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000..bc74300 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py new file mode 100644 index 0000000..6305e40 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '4. Set FHPS rampup parameter and start it.' + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + print 'Enter to continue test' + inpval = raw_input() + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc new file mode 100644 index 0000000..b19006e Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc differ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py new file mode 100644 index 0000000..ebf5a71 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_sync(): + """Test Sync Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + print '5. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '6. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '7. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '8. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print '9. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' + +def test_sync_prepro(): + """Test Sync PrePro Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '5. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '6. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '7. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '8. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '9. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '10.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '11. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc new file mode 100644 index 0000000..3637b06 Binary files /dev/null and b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc differ diff --git a/EC-GN-JA-PCF/target/.codac-version b/EC-GN-JA-PCF/target/.codac-version new file mode 100644 index 0000000..1f2be2a --- /dev/null +++ b/EC-GN-JA-PCF/target/.codac-version @@ -0,0 +1 @@ +6.3 \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/bin/Gyrotron01DAN b/EC-GN-JA-PCF/target/bin/Gyrotron01DAN new file mode 100755 index 0000000..0f2e98d Binary files /dev/null and b/EC-GN-JA-PCF/target/bin/Gyrotron01DAN differ diff --git a/EC-GN-JA-PCF/target/bin/Gyrotron02DAN b/EC-GN-JA-PCF/target/bin/Gyrotron02DAN new file mode 100755 index 0000000..d3f6ac9 Binary files /dev/null and b/EC-GN-JA-PCF/target/bin/Gyrotron02DAN differ diff --git a/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PCF0SYSM-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm b/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PCF0SYSM-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm new file mode 100644 index 0000000..9255f40 Binary files /dev/null and b/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PCF0SYSM-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm differ diff --git a/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm b/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm new file mode 100644 index 0000000..75717f5 Binary files /dev/null and b/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm differ diff --git a/EC-GN-JA-PCF/target/iter-icint-EC-GN-1.0.0-1.noarch.rpm b/EC-GN-JA-PCF/target/iter-icint-EC-GN-1.0.0-1.noarch.rpm new file mode 100644 index 0000000..ab45c14 Binary files /dev/null and b/EC-GN-JA-PCF/target/iter-icint-EC-GN-1.0.0-1.noarch.rpm differ diff --git a/EC-GN-JA-PCF/target/iter-icint-EC-GN-alarm-1.0.0-1.noarch.rpm b/EC-GN-JA-PCF/target/iter-icint-EC-GN-alarm-1.0.0-1.noarch.rpm new file mode 100644 index 0000000..a0ca266 Binary files /dev/null and b/EC-GN-JA-PCF/target/iter-icint-EC-GN-alarm-1.0.0-1.noarch.rpm differ diff --git a/EC-GN-JA-PCF/target/iter-icint-EC-GN-archive-1.0.0-1.noarch.rpm b/EC-GN-JA-PCF/target/iter-icint-EC-GN-archive-1.0.0-1.noarch.rpm new file mode 100644 index 0000000..31a7803 Binary files /dev/null and b/EC-GN-JA-PCF/target/iter-icint-EC-GN-archive-1.0.0-1.noarch.rpm differ diff --git a/EC-GN-JA-PCF/target/iter-icint-EC-GN-opi-1.0.0-1.noarch.rpm b/EC-GN-JA-PCF/target/iter-icint-EC-GN-opi-1.0.0-1.noarch.rpm new file mode 100644 index 0000000..4b31694 Binary files /dev/null and b/EC-GN-JA-PCF/target/iter-icint-EC-GN-opi-1.0.0-1.noarch.rpm differ diff --git a/EC-GN-JA-PCF/target/main/beast/EC-beast.xml b/EC-GN-JA-PCF/target/main/beast/EC-beast.xml new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/beast/EC-beast.xml @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +
The connection for configuration and state to 4110 was broken or the frame is not correct
+
+ +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+
+ +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml b/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml new file mode 100755 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/target/main/boy/SymbolLibrary b/EC-GN-JA-PCF/target/main/boy/SymbolLibrary new file mode 120000 index 0000000..3fee910 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/SymbolLibrary @@ -0,0 +1 @@ +/opt/codac-6.3/opi/boy/SymbolLibrary \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml new file mode 100755 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml new file mode 100755 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml new file mode 100755 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml new file mode 100755 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml new file mode 100755 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml new file mode 100755 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml new file mode 100755 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml new file mode 100755 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml new file mode 100755 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml new file mode 100755 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml new file mode 100755 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml new file mode 100755 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml new file mode 100755 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml new file mode 100755 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml new file mode 100755 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml new file mode 100755 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml new file mode 100755 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml new file mode 100755 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml new file mode 100755 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml new file mode 100755 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml new file mode 100755 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml new file mode 100755 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml new file mode 100755 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml new file mode 100755 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi new file mode 100755 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi new file mode 100755 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi new file mode 100755 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi new file mode 100755 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi new file mode 100755 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/target/main/boy/templates b/EC-GN-JA-PCF/target/main/boy/templates new file mode 120000 index 0000000..14f8e4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/templates @@ -0,0 +1 @@ +/opt/codac-6.3/opi/boy/resources/templates \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux new file mode 100644 index 0000000..eced617 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux @@ -0,0 +1,305 @@ +../../../../obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o: JAEPICSCAInput.cpp JAEPICSCAInput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapInputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h +../../../../obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o: JAEPICSCAOutput.cpp JAEPICSCAOutput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + JAEPICSCAInput.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/Scheduler/L5GAMs/MemoryMapAsyncOutputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux new file mode 100644 index 0000000..d7f31d7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux @@ -0,0 +1,305 @@ +JAEPICSCAInput.o: JAEPICSCAInput.cpp JAEPICSCAInput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapInputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h +JAEPICSCAOutput.o: JAEPICSCAOutput.cpp JAEPICSCAOutput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + JAEPICSCAInput.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/Scheduler/L5GAMs/MemoryMapAsyncOutputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/target/main/c++/Makefile b/EC-GN-JA-PCF/target/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h b/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc b/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB new file mode 100755 index 0000000..72c1b69 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB differ diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB.dbd.d b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB.dbd.d new file mode 100644 index 0000000..9214de7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB.dbd.d @@ -0,0 +1,168 @@ +../O.Common/CUB.dbd: /opt/codac-6.3/epics/dbd/base.dbd \ + /opt/codac-6.3/epics/dbd/menuGlobal.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmStat.dbd \ + /opt/codac-6.3/epics/dbd/menuFtype.dbd \ + /opt/codac-6.3/epics/dbd/menuIvoa.dbd \ + /opt/codac-6.3/epics/dbd/menuOmsl.dbd \ + /opt/codac-6.3/epics/dbd/menuPini.dbd \ + /opt/codac-6.3/epics/dbd/menuPost.dbd \ + /opt/codac-6.3/epics/dbd/menuPriority.dbd \ + /opt/codac-6.3/epics/dbd/menuYesNo.dbd \ + /opt/codac-6.3/epics/dbd/menuSimm.dbd \ + /opt/codac-6.3/epics/dbd/menuConvert.dbd \ + /opt/codac-6.3/epics/dbd/menuScan.dbd \ + /opt/codac-6.3/epics/dbd/stdRecords.dbd \ + /opt/codac-6.3/epics/dbd/aaiRecord.dbd \ + /opt/codac-6.3/epics/dbd/dbCommon.dbd \ + /opt/codac-6.3/epics/dbd/aaoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aiRecord.dbd \ + /opt/codac-6.3/epics/dbd/aoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aSubRecord.dbd \ + /opt/codac-6.3/epics/dbd/biRecord.dbd \ + /opt/codac-6.3/epics/dbd/boRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/compressRecord.dbd \ + /opt/codac-6.3/epics/dbd/dfanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/eventRecord.dbd \ + /opt/codac-6.3/epics/dbd/fanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/histogramRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64inRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64outRecord.dbd \ + /opt/codac-6.3/epics/dbd/longinRecord.dbd \ + /opt/codac-6.3/epics/dbd/longoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsiRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsoRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/permissiveRecord.dbd \ + /opt/codac-6.3/epics/dbd/printfRecord.dbd \ + /opt/codac-6.3/epics/dbd/selRecord.dbd \ + /opt/codac-6.3/epics/dbd/seqRecord.dbd \ + /opt/codac-6.3/epics/dbd/stateRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringinRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/subRecord.dbd \ + /opt/codac-6.3/epics/dbd/subArrayRecord.dbd \ + /opt/codac-6.3/epics/dbd/waveformRecord.dbd \ + /opt/codac-6.3/epics/dbd/filters.dbd \ + /opt/codac-6.3/epics/dbd/links.dbd \ + /opt/codac-6.3/epics/dbd/devSoft.dbd \ + /opt/codac-6.3/epics/dbd/asSub.dbd \ + /opt/codac-6.3/epics/dbd/dbCore.dbd \ + /opt/codac-6.3/epics/dbd/rsrv.dbd \ + /opt/codac-6.3/epics/dbd/std.dbd \ + /opt/codac-6.3/epics/dbd/autosave.dbd \ + /opt/codac-6.3/epics/dbd/iocmon.dbd \ + /opt/codac-6.3/epics/dbd/sysmon.dbd \ + /opt/codac-6.3/epics/dbd/asyn.dbd \ + /opt/codac-6.3/epics/dbd/asynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devEpics.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctet.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd \ + /opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd + +/opt/codac-6.3/epics/dbd/base.dbd: +/opt/codac-6.3/epics/dbd/menuGlobal.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmStat.dbd: +/opt/codac-6.3/epics/dbd/menuFtype.dbd: +/opt/codac-6.3/epics/dbd/menuIvoa.dbd: +/opt/codac-6.3/epics/dbd/menuOmsl.dbd: +/opt/codac-6.3/epics/dbd/menuPini.dbd: +/opt/codac-6.3/epics/dbd/menuPost.dbd: +/opt/codac-6.3/epics/dbd/menuPriority.dbd: +/opt/codac-6.3/epics/dbd/menuYesNo.dbd: +/opt/codac-6.3/epics/dbd/menuSimm.dbd: +/opt/codac-6.3/epics/dbd/menuConvert.dbd: +/opt/codac-6.3/epics/dbd/menuScan.dbd: +/opt/codac-6.3/epics/dbd/stdRecords.dbd: +/opt/codac-6.3/epics/dbd/aaiRecord.dbd: +/opt/codac-6.3/epics/dbd/dbCommon.dbd: +/opt/codac-6.3/epics/dbd/aaoRecord.dbd: +/opt/codac-6.3/epics/dbd/aiRecord.dbd: +/opt/codac-6.3/epics/dbd/aoRecord.dbd: +/opt/codac-6.3/epics/dbd/aSubRecord.dbd: +/opt/codac-6.3/epics/dbd/biRecord.dbd: +/opt/codac-6.3/epics/dbd/boRecord.dbd: +/opt/codac-6.3/epics/dbd/calcRecord.dbd: +/opt/codac-6.3/epics/dbd/calcoutRecord.dbd: +/opt/codac-6.3/epics/dbd/compressRecord.dbd: +/opt/codac-6.3/epics/dbd/dfanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/eventRecord.dbd: +/opt/codac-6.3/epics/dbd/fanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/histogramRecord.dbd: +/opt/codac-6.3/epics/dbd/int64inRecord.dbd: +/opt/codac-6.3/epics/dbd/int64outRecord.dbd: +/opt/codac-6.3/epics/dbd/longinRecord.dbd: +/opt/codac-6.3/epics/dbd/longoutRecord.dbd: +/opt/codac-6.3/epics/dbd/lsiRecord.dbd: +/opt/codac-6.3/epics/dbd/lsoRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/permissiveRecord.dbd: +/opt/codac-6.3/epics/dbd/printfRecord.dbd: +/opt/codac-6.3/epics/dbd/selRecord.dbd: +/opt/codac-6.3/epics/dbd/seqRecord.dbd: +/opt/codac-6.3/epics/dbd/stateRecord.dbd: +/opt/codac-6.3/epics/dbd/stringinRecord.dbd: +/opt/codac-6.3/epics/dbd/stringoutRecord.dbd: +/opt/codac-6.3/epics/dbd/subRecord.dbd: +/opt/codac-6.3/epics/dbd/subArrayRecord.dbd: +/opt/codac-6.3/epics/dbd/waveformRecord.dbd: +/opt/codac-6.3/epics/dbd/filters.dbd: +/opt/codac-6.3/epics/dbd/links.dbd: +/opt/codac-6.3/epics/dbd/devSoft.dbd: +/opt/codac-6.3/epics/dbd/asSub.dbd: +/opt/codac-6.3/epics/dbd/dbCore.dbd: +/opt/codac-6.3/epics/dbd/rsrv.dbd: +/opt/codac-6.3/epics/dbd/std.dbd: +/opt/codac-6.3/epics/dbd/autosave.dbd: +/opt/codac-6.3/epics/dbd/iocmon.dbd: +/opt/codac-6.3/epics/dbd/sysmon.dbd: +/opt/codac-6.3/epics/dbd/asyn.dbd: +/opt/codac-6.3/epics/dbd/asynRecord.dbd: +/opt/codac-6.3/epics/dbd/devEpics.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctet.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynRecord.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd: +/opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd: +/opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd: +/opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd: +../O.Common/CUB.dbd: ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.d b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.d new file mode 100644 index 0000000..e3f0847 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.d @@ -0,0 +1,16 @@ +CUBMain.o: ../CUBMain.cpp /opt/codac-6.3/epics/include/epicsExit.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/iocsh.h diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.o b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.o new file mode 100644 index 0000000..3a59d39 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.cpp b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.cpp new file mode 100644 index 0000000..d2f4b04 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.cpp @@ -0,0 +1,469 @@ +/* THIS IS A GENERATED FILE. DO NOT EDIT! */ +/* Generated from ../O.Common/CUB.dbd */ + +#include +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_asynRSET, *pvar_rset_biRSET, *pvar_rset_boRSET, + *pvar_rset_calcRSET, *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_asynRecordSizeOffset, pvar_func_biRecordSizeOffset, + pvar_func_boRecordSizeOffset, pvar_func_calcRecordSizeOffset, + pvar_func_calcoutRecordSizeOffset, pvar_func_compressRecordSizeOffset, + pvar_func_dfanoutRecordSizeOffset, pvar_func_epidRecordSizeOffset, + pvar_func_eventRecordSizeOffset, pvar_func_fanoutRecordSizeOffset, + pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "asyn", "bi", "bo", "calc", + "calcout", "compress", "dfanout", "epid", "event", "fanout", + "histogram", "int64in", "int64out", "longin", "longout", "lsi", "lso", + "mbbi", "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", + "sel", "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_asynRSET, pvar_func_asynRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_asynAiInt32, + *pvar_dset_asynAiInt32Average, *pvar_dset_asynAiFloat64, + *pvar_dset_asynAiFloat64Average, *pvar_dset_asynAiInt64, + *pvar_dset_devAoSoft, *pvar_dset_devAoSoftRaw, + *pvar_dset_devAoSoftCallback, *pvar_dset_devAoStats, + *pvar_dset_asynAoInt32, *pvar_dset_asynAoFloat64, + *pvar_dset_asynAoInt64, *pvar_dset_asynRecordDevice, + *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_asynBiInt32, *pvar_dset_asynBiUInt32Digital, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_asynBoInt32, *pvar_dset_asynBoUInt32Digital, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_asynInt64In, *pvar_dset_devI64outSoft, + *pvar_dset_devI64outSoftCallback, *pvar_dset_asynInt64Out, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_asynLiInt32, + *pvar_dset_asynLiUInt32Digital, *pvar_dset_asynLiInt64, + *pvar_dset_devLoSoft, *pvar_dset_devLoSoftCallback, + *pvar_dset_asynLoInt32, *pvar_dset_asynLoUInt32Digital, + *pvar_dset_asynLoInt64, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_asynLsiOctetCmdResponse, *pvar_dset_asynLsiOctetWriteRead, + *pvar_dset_asynLsiOctetRead, *pvar_dset_devLsoSoft, + *pvar_dset_devLsoSoftCallback, *pvar_dset_devLsoStdio, + *pvar_dset_asynLsoOctetWrite, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_asynMbbiInt32, + *pvar_dset_asynMbbiUInt32Digital, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, + *pvar_dset_asynMbbiDirectUInt32Digital, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_asynMbboInt32, *pvar_dset_asynMbboUInt32Digital, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, + *pvar_dset_asynMbboDirectUInt32Digital, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_asynPfOctetWrite, *pvar_dset_devSiSoft, + *pvar_dset_devSiSoftCallback, *pvar_dset_devTimestampSI, + *pvar_dset_devSiGeneralTime, *pvar_dset_devSiEnviron, + *pvar_dset_devStringinStats, *pvar_dset_devStringinEnvVar, + *pvar_dset_devStringinEpics, *pvar_dset_devSysMonSiStats, + *pvar_dset_asynSiOctetCmdResponse, *pvar_dset_asynSiOctetWriteRead, + *pvar_dset_asynSiOctetRead, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_asynSoOctetWrite, *pvar_dset_devSASoft, + *pvar_dset_devWfSoft, *pvar_dset_devWaveformStats, + *pvar_dset_devSysMonWaveStats, *pvar_dset_asynWfOctetCmdResponse, + *pvar_dset_asynWfOctetWriteRead, *pvar_dset_asynWfOctetRead, + *pvar_dset_asynWfOctetWrite, *pvar_dset_asynWfOctetWriteBinary, + *pvar_dset_asynInt8ArrayWfIn, *pvar_dset_asynInt8ArrayWfOut, + *pvar_dset_asynInt16ArrayWfIn, *pvar_dset_asynInt16ArrayWfOut, + *pvar_dset_asynInt32ArrayWfIn, *pvar_dset_asynInt32ArrayWfOut, + *pvar_dset_asynInt32TimeSeries, *pvar_dset_asynFloat32ArrayWfIn, + *pvar_dset_asynFloat32ArrayWfOut, *pvar_dset_asynFloat64ArrayWfIn, + *pvar_dset_asynFloat64ArrayWfOut, *pvar_dset_asynFloat64TimeSeries, + *pvar_dset_asynInt64ArrayWfIn, *pvar_dset_asynInt64ArrayWfOut, + *pvar_dset_asynInt64TimeSeries; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "asynAiInt32", "asynAiInt32Average", + "asynAiFloat64", "asynAiFloat64Average", "asynAiInt64", "devAoSoft", + "devAoSoftRaw", "devAoSoftCallback", "devAoStats", "asynAoInt32", + "asynAoFloat64", "asynAoInt64", "asynRecordDevice", "devBiSoft", + "devBiSoftRaw", "devBiSoftCallback", "devBiDbState", "asynBiInt32", + "asynBiUInt32Digital", "devBoSoft", "devBoSoftRaw", + "devBoSoftCallback", "devBoGeneralTime", "devBoDbState", + "devBoSimulation", "asynBoInt32", "asynBoUInt32Digital", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "asynInt64In", "devI64outSoft", + "devI64outSoftCallback", "asynInt64Out", "devLiSoft", + "devLiSoftCallback", "devLiGeneralTime", "asynLiInt32", + "asynLiUInt32Digital", "asynLiInt64", "devLoSoft", + "devLoSoftCallback", "asynLoInt32", "asynLoUInt32Digital", + "asynLoInt64", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "asynLsiOctetCmdResponse", "asynLsiOctetWriteRead", + "asynLsiOctetRead", "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", + "asynLsoOctetWrite", "devMbbiSoft", "devMbbiSoftRaw", + "devMbbiSoftCallback", "devSysMonMbbiStats", "asynMbbiInt32", + "asynMbbiUInt32Digital", "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "asynMbbiDirectUInt32Digital", "devMbboSoft", "devMbboSoftRaw", + "devMbboSoftCallback", "asynMbboInt32", "asynMbboUInt32Digital", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "asynMbboDirectUInt32Digital", + "devPrintfSoft", "devPrintfSoftCallback", "devPrintfStdio", + "asynPfOctetWrite", "devSiSoft", "devSiSoftCallback", + "devTimestampSI", "devSiGeneralTime", "devSiEnviron", + "devStringinStats", "devStringinEnvVar", "devStringinEpics", + "devSysMonSiStats", "asynSiOctetCmdResponse", "asynSiOctetWriteRead", + "asynSiOctetRead", "devSoSoft", "devSoSoftCallback", "devSoStdio", + "asynSoOctetWrite", "devSASoft", "devWfSoft", "devWaveformStats", + "devSysMonWaveStats", "asynWfOctetCmdResponse", + "asynWfOctetWriteRead", "asynWfOctetRead", "asynWfOctetWrite", + "asynWfOctetWriteBinary", "asynInt8ArrayWfIn", "asynInt8ArrayWfOut", + "asynInt16ArrayWfIn", "asynInt16ArrayWfOut", "asynInt32ArrayWfIn", + "asynInt32ArrayWfOut", "asynInt32TimeSeries", "asynFloat32ArrayWfIn", + "asynFloat32ArrayWfOut", "asynFloat64ArrayWfIn", + "asynFloat64ArrayWfOut", "asynFloat64TimeSeries", + "asynInt64ArrayWfIn", "asynInt64ArrayWfOut", "asynInt64TimeSeries" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, + pvar_dset_asynAiInt32, pvar_dset_asynAiInt32Average, + pvar_dset_asynAiFloat64, pvar_dset_asynAiFloat64Average, + pvar_dset_asynAiInt64, pvar_dset_devAoSoft, pvar_dset_devAoSoftRaw, + pvar_dset_devAoSoftCallback, pvar_dset_devAoStats, + pvar_dset_asynAoInt32, pvar_dset_asynAoFloat64, pvar_dset_asynAoInt64, + pvar_dset_asynRecordDevice, pvar_dset_devBiSoft, + pvar_dset_devBiSoftRaw, pvar_dset_devBiSoftCallback, + pvar_dset_devBiDbState, pvar_dset_asynBiInt32, + pvar_dset_asynBiUInt32Digital, pvar_dset_devBoSoft, + pvar_dset_devBoSoftRaw, pvar_dset_devBoSoftCallback, + pvar_dset_devBoGeneralTime, pvar_dset_devBoDbState, + pvar_dset_devBoSimulation, pvar_dset_asynBoInt32, + pvar_dset_asynBoUInt32Digital, pvar_dset_devCalcoutSoft, + pvar_dset_devCalcoutSoftCallback, pvar_dset_devEpidSoft, + pvar_dset_devEpidSoftCB, pvar_dset_devEventSoft, + pvar_dset_devHistogramSoft, pvar_dset_devI64inSoft, + pvar_dset_devI64inSoftCallback, pvar_dset_asynInt64In, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_asynInt64Out, pvar_dset_devLiSoft, + pvar_dset_devLiSoftCallback, pvar_dset_devLiGeneralTime, + pvar_dset_asynLiInt32, pvar_dset_asynLiUInt32Digital, + pvar_dset_asynLiInt64, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_asynLoInt32, + pvar_dset_asynLoUInt32Digital, pvar_dset_asynLoInt64, + pvar_dset_devLsiSoft, pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, + pvar_dset_asynLsiOctetCmdResponse, pvar_dset_asynLsiOctetWriteRead, + pvar_dset_asynLsiOctetRead, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_asynLsoOctetWrite, pvar_dset_devMbbiSoft, + pvar_dset_devMbbiSoftRaw, pvar_dset_devMbbiSoftCallback, + pvar_dset_devSysMonMbbiStats, pvar_dset_asynMbbiInt32, + pvar_dset_asynMbbiUInt32Digital, pvar_dset_devMbbiDirectSoft, + pvar_dset_devMbbiDirectSoftRaw, pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, + pvar_dset_asynMbbiDirectUInt32Digital, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_asynMbboInt32, pvar_dset_asynMbboUInt32Digital, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, + pvar_dset_asynMbboDirectUInt32Digital, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_asynPfOctetWrite, pvar_dset_devSiSoft, + pvar_dset_devSiSoftCallback, pvar_dset_devTimestampSI, + pvar_dset_devSiGeneralTime, pvar_dset_devSiEnviron, + pvar_dset_devStringinStats, pvar_dset_devStringinEnvVar, + pvar_dset_devStringinEpics, pvar_dset_devSysMonSiStats, + pvar_dset_asynSiOctetCmdResponse, pvar_dset_asynSiOctetWriteRead, + pvar_dset_asynSiOctetRead, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_asynSoOctetWrite, pvar_dset_devSASoft, pvar_dset_devWfSoft, + pvar_dset_devWaveformStats, pvar_dset_devSysMonWaveStats, + pvar_dset_asynWfOctetCmdResponse, pvar_dset_asynWfOctetWriteRead, + pvar_dset_asynWfOctetRead, pvar_dset_asynWfOctetWrite, + pvar_dset_asynWfOctetWriteBinary, pvar_dset_asynInt8ArrayWfIn, + pvar_dset_asynInt8ArrayWfOut, pvar_dset_asynInt16ArrayWfIn, + pvar_dset_asynInt16ArrayWfOut, pvar_dset_asynInt32ArrayWfIn, + pvar_dset_asynInt32ArrayWfOut, pvar_dset_asynInt32TimeSeries, + pvar_dset_asynFloat32ArrayWfIn, pvar_dset_asynFloat32ArrayWfOut, + pvar_dset_asynFloat64ArrayWfIn, pvar_dset_asynFloat64ArrayWfOut, + pvar_dset_asynFloat64TimeSeries, pvar_dset_asynInt64ArrayWfIn, + pvar_dset_asynInt64ArrayWfOut, pvar_dset_asynInt64TimeSeries +}; + +epicsShareExtern drvet *pvar_drvet_drvAsyn; + +static const char *driverSupportNames[] = { + "drvAsyn"}; + +static struct drvet *drvsl[] = { + pvar_drvet_drvAsyn}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_asynInterposeDelayRegister, + pvar_func_asynInterposeEchoRegister, + pvar_func_asynInterposeEosRegister, + pvar_func_asynInterposeFlushRegister, pvar_func_asynRegister, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_drvAsynIPPortRegisterCommands, + pvar_func_drvAsynIPServerPortRegisterCommands, + pvar_func_drvAsynSerialPortRegisterCommands, + pvar_func_drvBlockTCPEventRegister, + pvar_func_drvBlockTCPRedundantPlcRegister, + pvar_func_drvBlockTCPRegister, pvar_func_drvCodacHeaderRegister, + pvar_func_drvCodacRedundantPlcRegister, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int CUB_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerDrivers(pbase, NELEMENTS(drvsl), driverSupportNames, drvsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_asynInterposeDelayRegister(); + pvar_func_asynInterposeEchoRegister(); + pvar_func_asynInterposeEosRegister(); + pvar_func_asynInterposeFlushRegister(); + pvar_func_asynRegister(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_drvAsynIPPortRegisterCommands(); + pvar_func_drvAsynIPServerPortRegisterCommands(); + pvar_func_drvAsynSerialPortRegisterCommands(); + pvar_func_drvBlockTCPEventRegister(); + pvar_func_drvBlockTCPRedundantPlcRegister(); + pvar_func_drvBlockTCPRegister(); + pvar_func_drvCodacHeaderRegister(); + pvar_func_drvCodacRedundantPlcRegister(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* CUB_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"CUB_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(CUB_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d new file mode 100644 index 0000000..70a149b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +CUB_registerRecordDeviceDriver.o: CUB_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o new file mode 100644 index 0000000..99a4454 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile new file mode 100755 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile new file mode 100755 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd new file mode 100644 index 0000000..c98cde5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd @@ -0,0 +1,18666 @@ +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(dbndInitialize) +registrar(iocSetLogSyslogRegister) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN new file mode 100755 index 0000000..888f6e1 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN differ diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d new file mode 100644 index 0000000..8887f28 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d @@ -0,0 +1,122 @@ +../O.Common/EC-GN.dbd: /opt/codac-6.3/epics/dbd/base.dbd \ + /opt/codac-6.3/epics/dbd/menuGlobal.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmStat.dbd \ + /opt/codac-6.3/epics/dbd/menuFtype.dbd \ + /opt/codac-6.3/epics/dbd/menuIvoa.dbd \ + /opt/codac-6.3/epics/dbd/menuOmsl.dbd \ + /opt/codac-6.3/epics/dbd/menuPini.dbd \ + /opt/codac-6.3/epics/dbd/menuPost.dbd \ + /opt/codac-6.3/epics/dbd/menuPriority.dbd \ + /opt/codac-6.3/epics/dbd/menuYesNo.dbd \ + /opt/codac-6.3/epics/dbd/menuSimm.dbd \ + /opt/codac-6.3/epics/dbd/menuConvert.dbd \ + /opt/codac-6.3/epics/dbd/menuScan.dbd \ + /opt/codac-6.3/epics/dbd/stdRecords.dbd \ + /opt/codac-6.3/epics/dbd/aaiRecord.dbd \ + /opt/codac-6.3/epics/dbd/dbCommon.dbd \ + /opt/codac-6.3/epics/dbd/aaoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aiRecord.dbd \ + /opt/codac-6.3/epics/dbd/aoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aSubRecord.dbd \ + /opt/codac-6.3/epics/dbd/biRecord.dbd \ + /opt/codac-6.3/epics/dbd/boRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/compressRecord.dbd \ + /opt/codac-6.3/epics/dbd/dfanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/eventRecord.dbd \ + /opt/codac-6.3/epics/dbd/fanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/histogramRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64inRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64outRecord.dbd \ + /opt/codac-6.3/epics/dbd/longinRecord.dbd \ + /opt/codac-6.3/epics/dbd/longoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsiRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsoRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/permissiveRecord.dbd \ + /opt/codac-6.3/epics/dbd/printfRecord.dbd \ + /opt/codac-6.3/epics/dbd/selRecord.dbd \ + /opt/codac-6.3/epics/dbd/seqRecord.dbd \ + /opt/codac-6.3/epics/dbd/stateRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringinRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/subRecord.dbd \ + /opt/codac-6.3/epics/dbd/subArrayRecord.dbd \ + /opt/codac-6.3/epics/dbd/waveformRecord.dbd \ + /opt/codac-6.3/epics/dbd/filters.dbd \ + /opt/codac-6.3/epics/dbd/links.dbd \ + /opt/codac-6.3/epics/dbd/devSoft.dbd \ + /opt/codac-6.3/epics/dbd/asSub.dbd \ + /opt/codac-6.3/epics/dbd/dbCore.dbd \ + /opt/codac-6.3/epics/dbd/rsrv.dbd \ + /opt/codac-6.3/epics/dbd/std.dbd \ + /opt/codac-6.3/epics/dbd/autosave.dbd \ + /opt/codac-6.3/epics/dbd/iocmon.dbd \ + /opt/codac-6.3/epics/dbd/sysmon.dbd + +/opt/codac-6.3/epics/dbd/base.dbd: +/opt/codac-6.3/epics/dbd/menuGlobal.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmStat.dbd: +/opt/codac-6.3/epics/dbd/menuFtype.dbd: +/opt/codac-6.3/epics/dbd/menuIvoa.dbd: +/opt/codac-6.3/epics/dbd/menuOmsl.dbd: +/opt/codac-6.3/epics/dbd/menuPini.dbd: +/opt/codac-6.3/epics/dbd/menuPost.dbd: +/opt/codac-6.3/epics/dbd/menuPriority.dbd: +/opt/codac-6.3/epics/dbd/menuYesNo.dbd: +/opt/codac-6.3/epics/dbd/menuSimm.dbd: +/opt/codac-6.3/epics/dbd/menuConvert.dbd: +/opt/codac-6.3/epics/dbd/menuScan.dbd: +/opt/codac-6.3/epics/dbd/stdRecords.dbd: +/opt/codac-6.3/epics/dbd/aaiRecord.dbd: +/opt/codac-6.3/epics/dbd/dbCommon.dbd: +/opt/codac-6.3/epics/dbd/aaoRecord.dbd: +/opt/codac-6.3/epics/dbd/aiRecord.dbd: +/opt/codac-6.3/epics/dbd/aoRecord.dbd: +/opt/codac-6.3/epics/dbd/aSubRecord.dbd: +/opt/codac-6.3/epics/dbd/biRecord.dbd: +/opt/codac-6.3/epics/dbd/boRecord.dbd: +/opt/codac-6.3/epics/dbd/calcRecord.dbd: +/opt/codac-6.3/epics/dbd/calcoutRecord.dbd: +/opt/codac-6.3/epics/dbd/compressRecord.dbd: +/opt/codac-6.3/epics/dbd/dfanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/eventRecord.dbd: +/opt/codac-6.3/epics/dbd/fanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/histogramRecord.dbd: +/opt/codac-6.3/epics/dbd/int64inRecord.dbd: +/opt/codac-6.3/epics/dbd/int64outRecord.dbd: +/opt/codac-6.3/epics/dbd/longinRecord.dbd: +/opt/codac-6.3/epics/dbd/longoutRecord.dbd: +/opt/codac-6.3/epics/dbd/lsiRecord.dbd: +/opt/codac-6.3/epics/dbd/lsoRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/permissiveRecord.dbd: +/opt/codac-6.3/epics/dbd/printfRecord.dbd: +/opt/codac-6.3/epics/dbd/selRecord.dbd: +/opt/codac-6.3/epics/dbd/seqRecord.dbd: +/opt/codac-6.3/epics/dbd/stateRecord.dbd: +/opt/codac-6.3/epics/dbd/stringinRecord.dbd: +/opt/codac-6.3/epics/dbd/stringoutRecord.dbd: +/opt/codac-6.3/epics/dbd/subRecord.dbd: +/opt/codac-6.3/epics/dbd/subArrayRecord.dbd: +/opt/codac-6.3/epics/dbd/waveformRecord.dbd: +/opt/codac-6.3/epics/dbd/filters.dbd: +/opt/codac-6.3/epics/dbd/links.dbd: +/opt/codac-6.3/epics/dbd/devSoft.dbd: +/opt/codac-6.3/epics/dbd/asSub.dbd: +/opt/codac-6.3/epics/dbd/dbCore.dbd: +/opt/codac-6.3/epics/dbd/rsrv.dbd: +/opt/codac-6.3/epics/dbd/std.dbd: +/opt/codac-6.3/epics/dbd/autosave.dbd: +/opt/codac-6.3/epics/dbd/iocmon.dbd: +/opt/codac-6.3/epics/dbd/sysmon.dbd: +../O.Common/EC-GN.dbd: ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d new file mode 100644 index 0000000..6f193c6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d @@ -0,0 +1,16 @@ +EC-GNMain.o: ../EC-GNMain.cpp /opt/codac-6.3/epics/include/epicsExit.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/iocsh.h diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o new file mode 100644 index 0000000..005701b Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp new file mode 100644 index 0000000..c3fe39f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp @@ -0,0 +1,356 @@ +/* THIS IS A GENERATED FILE. DO NOT EDIT! */ +/* Generated from ../O.Common/EC-GN.dbd */ + +#include +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_biRSET, *pvar_rset_boRSET, *pvar_rset_calcRSET, + *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_biRecordSizeOffset, pvar_func_boRecordSizeOffset, + pvar_func_calcRecordSizeOffset, pvar_func_calcoutRecordSizeOffset, + pvar_func_compressRecordSizeOffset, pvar_func_dfanoutRecordSizeOffset, + pvar_func_epidRecordSizeOffset, pvar_func_eventRecordSizeOffset, + pvar_func_fanoutRecordSizeOffset, pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "bi", "bo", "calc", "calcout", + "compress", "dfanout", "epid", "event", "fanout", "histogram", + "int64in", "int64out", "longin", "longout", "lsi", "lso", "mbbi", + "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", "sel", + "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_devAoSoft, + *pvar_dset_devAoSoftRaw, *pvar_dset_devAoSoftCallback, + *pvar_dset_devAoStats, *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_devI64outSoft, *pvar_dset_devI64outSoftCallback, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_devLoSoft, + *pvar_dset_devLoSoftCallback, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_devLsoSoft, *pvar_dset_devLsoSoftCallback, + *pvar_dset_devLsoStdio, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_devSiSoft, *pvar_dset_devSiSoftCallback, + *pvar_dset_devTimestampSI, *pvar_dset_devSiGeneralTime, + *pvar_dset_devSiEnviron, *pvar_dset_devStringinStats, + *pvar_dset_devStringinEnvVar, *pvar_dset_devStringinEpics, + *pvar_dset_devSysMonSiStats, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_devSASoft, *pvar_dset_devWfSoft, + *pvar_dset_devWaveformStats, *pvar_dset_devSysMonWaveStats; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "devAoSoft", "devAoSoftRaw", "devAoSoftCallback", + "devAoStats", "devBiSoft", "devBiSoftRaw", "devBiSoftCallback", + "devBiDbState", "devBoSoft", "devBoSoftRaw", "devBoSoftCallback", + "devBoGeneralTime", "devBoDbState", "devBoSimulation", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "devI64outSoft", "devI64outSoftCallback", + "devLiSoft", "devLiSoftCallback", "devLiGeneralTime", "devLoSoft", + "devLoSoftCallback", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", "devMbbiSoft", + "devMbbiSoftRaw", "devMbbiSoftCallback", "devSysMonMbbiStats", + "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "devMbboSoft", "devMbboSoftRaw", "devMbboSoftCallback", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "devPrintfSoft", "devPrintfSoftCallback", + "devPrintfStdio", "devSiSoft", "devSiSoftCallback", "devTimestampSI", + "devSiGeneralTime", "devSiEnviron", "devStringinStats", + "devStringinEnvVar", "devStringinEpics", "devSysMonSiStats", + "devSoSoft", "devSoSoftCallback", "devSoStdio", "devSASoft", + "devWfSoft", "devWaveformStats", "devSysMonWaveStats" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, pvar_dset_devAoSoft, + pvar_dset_devAoSoftRaw, pvar_dset_devAoSoftCallback, + pvar_dset_devAoStats, pvar_dset_devBiSoft, pvar_dset_devBiSoftRaw, + pvar_dset_devBiSoftCallback, pvar_dset_devBiDbState, + pvar_dset_devBoSoft, pvar_dset_devBoSoftRaw, + pvar_dset_devBoSoftCallback, pvar_dset_devBoGeneralTime, + pvar_dset_devBoDbState, pvar_dset_devBoSimulation, + pvar_dset_devCalcoutSoft, pvar_dset_devCalcoutSoftCallback, + pvar_dset_devEpidSoft, pvar_dset_devEpidSoftCB, + pvar_dset_devEventSoft, pvar_dset_devHistogramSoft, + pvar_dset_devI64inSoft, pvar_dset_devI64inSoftCallback, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_devLiSoft, pvar_dset_devLiSoftCallback, + pvar_dset_devLiGeneralTime, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_devLsiSoft, + pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_devMbbiSoft, pvar_dset_devMbbiSoftRaw, + pvar_dset_devMbbiSoftCallback, pvar_dset_devSysMonMbbiStats, + pvar_dset_devMbbiDirectSoft, pvar_dset_devMbbiDirectSoftRaw, + pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_devSiSoft, pvar_dset_devSiSoftCallback, + pvar_dset_devTimestampSI, pvar_dset_devSiGeneralTime, + pvar_dset_devSiEnviron, pvar_dset_devStringinStats, + pvar_dset_devStringinEnvVar, pvar_dset_devStringinEpics, + pvar_dset_devSysMonSiStats, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_devSASoft, pvar_dset_devWfSoft, pvar_dset_devWaveformStats, + pvar_dset_devSysMonWaveStats +}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int EC_GN_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* EC_GN_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"EC_GN_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(EC_GN_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d new file mode 100644 index 0000000..d23c55d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +EC-GN_registerRecordDeviceDriver.o: EC-GN_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o new file mode 100644 index 0000000..3d115aa Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/Makefile b/EC-GN-JA-PCF/target/main/epics/Makefile new file mode 100644 index 0000000..5c6175c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/Makefile @@ -0,0 +1,35 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *SharedTemplateApp dirs +$(foreach dir, $(filter-out %SharedTemplateApp, $(filter %App, $(DIRS))), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %SharedTemplateApp, $(DIRS)))) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/.appdesc b/EC-GN-JA-PCF/target/main/epics/PLCApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC new file mode 100755 index 0000000..e8d546a Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC differ diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d new file mode 100644 index 0000000..f969328 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d @@ -0,0 +1,168 @@ +../O.Common/PLC.dbd: /opt/codac-6.3/epics/dbd/base.dbd \ + /opt/codac-6.3/epics/dbd/menuGlobal.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmStat.dbd \ + /opt/codac-6.3/epics/dbd/menuFtype.dbd \ + /opt/codac-6.3/epics/dbd/menuIvoa.dbd \ + /opt/codac-6.3/epics/dbd/menuOmsl.dbd \ + /opt/codac-6.3/epics/dbd/menuPini.dbd \ + /opt/codac-6.3/epics/dbd/menuPost.dbd \ + /opt/codac-6.3/epics/dbd/menuPriority.dbd \ + /opt/codac-6.3/epics/dbd/menuYesNo.dbd \ + /opt/codac-6.3/epics/dbd/menuSimm.dbd \ + /opt/codac-6.3/epics/dbd/menuConvert.dbd \ + /opt/codac-6.3/epics/dbd/menuScan.dbd \ + /opt/codac-6.3/epics/dbd/stdRecords.dbd \ + /opt/codac-6.3/epics/dbd/aaiRecord.dbd \ + /opt/codac-6.3/epics/dbd/dbCommon.dbd \ + /opt/codac-6.3/epics/dbd/aaoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aiRecord.dbd \ + /opt/codac-6.3/epics/dbd/aoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aSubRecord.dbd \ + /opt/codac-6.3/epics/dbd/biRecord.dbd \ + /opt/codac-6.3/epics/dbd/boRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/compressRecord.dbd \ + /opt/codac-6.3/epics/dbd/dfanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/eventRecord.dbd \ + /opt/codac-6.3/epics/dbd/fanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/histogramRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64inRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64outRecord.dbd \ + /opt/codac-6.3/epics/dbd/longinRecord.dbd \ + /opt/codac-6.3/epics/dbd/longoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsiRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsoRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/permissiveRecord.dbd \ + /opt/codac-6.3/epics/dbd/printfRecord.dbd \ + /opt/codac-6.3/epics/dbd/selRecord.dbd \ + /opt/codac-6.3/epics/dbd/seqRecord.dbd \ + /opt/codac-6.3/epics/dbd/stateRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringinRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/subRecord.dbd \ + /opt/codac-6.3/epics/dbd/subArrayRecord.dbd \ + /opt/codac-6.3/epics/dbd/waveformRecord.dbd \ + /opt/codac-6.3/epics/dbd/filters.dbd \ + /opt/codac-6.3/epics/dbd/links.dbd \ + /opt/codac-6.3/epics/dbd/devSoft.dbd \ + /opt/codac-6.3/epics/dbd/asSub.dbd \ + /opt/codac-6.3/epics/dbd/dbCore.dbd \ + /opt/codac-6.3/epics/dbd/rsrv.dbd \ + /opt/codac-6.3/epics/dbd/std.dbd \ + /opt/codac-6.3/epics/dbd/autosave.dbd \ + /opt/codac-6.3/epics/dbd/iocmon.dbd \ + /opt/codac-6.3/epics/dbd/sysmon.dbd \ + /opt/codac-6.3/epics/dbd/asyn.dbd \ + /opt/codac-6.3/epics/dbd/asynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devEpics.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctet.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd \ + /opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd + +/opt/codac-6.3/epics/dbd/base.dbd: +/opt/codac-6.3/epics/dbd/menuGlobal.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmStat.dbd: +/opt/codac-6.3/epics/dbd/menuFtype.dbd: +/opt/codac-6.3/epics/dbd/menuIvoa.dbd: +/opt/codac-6.3/epics/dbd/menuOmsl.dbd: +/opt/codac-6.3/epics/dbd/menuPini.dbd: +/opt/codac-6.3/epics/dbd/menuPost.dbd: +/opt/codac-6.3/epics/dbd/menuPriority.dbd: +/opt/codac-6.3/epics/dbd/menuYesNo.dbd: +/opt/codac-6.3/epics/dbd/menuSimm.dbd: +/opt/codac-6.3/epics/dbd/menuConvert.dbd: +/opt/codac-6.3/epics/dbd/menuScan.dbd: +/opt/codac-6.3/epics/dbd/stdRecords.dbd: +/opt/codac-6.3/epics/dbd/aaiRecord.dbd: +/opt/codac-6.3/epics/dbd/dbCommon.dbd: +/opt/codac-6.3/epics/dbd/aaoRecord.dbd: +/opt/codac-6.3/epics/dbd/aiRecord.dbd: +/opt/codac-6.3/epics/dbd/aoRecord.dbd: +/opt/codac-6.3/epics/dbd/aSubRecord.dbd: +/opt/codac-6.3/epics/dbd/biRecord.dbd: +/opt/codac-6.3/epics/dbd/boRecord.dbd: +/opt/codac-6.3/epics/dbd/calcRecord.dbd: +/opt/codac-6.3/epics/dbd/calcoutRecord.dbd: +/opt/codac-6.3/epics/dbd/compressRecord.dbd: +/opt/codac-6.3/epics/dbd/dfanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/eventRecord.dbd: +/opt/codac-6.3/epics/dbd/fanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/histogramRecord.dbd: +/opt/codac-6.3/epics/dbd/int64inRecord.dbd: +/opt/codac-6.3/epics/dbd/int64outRecord.dbd: +/opt/codac-6.3/epics/dbd/longinRecord.dbd: +/opt/codac-6.3/epics/dbd/longoutRecord.dbd: +/opt/codac-6.3/epics/dbd/lsiRecord.dbd: +/opt/codac-6.3/epics/dbd/lsoRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/permissiveRecord.dbd: +/opt/codac-6.3/epics/dbd/printfRecord.dbd: +/opt/codac-6.3/epics/dbd/selRecord.dbd: +/opt/codac-6.3/epics/dbd/seqRecord.dbd: +/opt/codac-6.3/epics/dbd/stateRecord.dbd: +/opt/codac-6.3/epics/dbd/stringinRecord.dbd: +/opt/codac-6.3/epics/dbd/stringoutRecord.dbd: +/opt/codac-6.3/epics/dbd/subRecord.dbd: +/opt/codac-6.3/epics/dbd/subArrayRecord.dbd: +/opt/codac-6.3/epics/dbd/waveformRecord.dbd: +/opt/codac-6.3/epics/dbd/filters.dbd: +/opt/codac-6.3/epics/dbd/links.dbd: +/opt/codac-6.3/epics/dbd/devSoft.dbd: +/opt/codac-6.3/epics/dbd/asSub.dbd: +/opt/codac-6.3/epics/dbd/dbCore.dbd: +/opt/codac-6.3/epics/dbd/rsrv.dbd: +/opt/codac-6.3/epics/dbd/std.dbd: +/opt/codac-6.3/epics/dbd/autosave.dbd: +/opt/codac-6.3/epics/dbd/iocmon.dbd: +/opt/codac-6.3/epics/dbd/sysmon.dbd: +/opt/codac-6.3/epics/dbd/asyn.dbd: +/opt/codac-6.3/epics/dbd/asynRecord.dbd: +/opt/codac-6.3/epics/dbd/devEpics.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctet.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynRecord.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd: +/opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd: +/opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd: +/opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd: +../O.Common/PLC.dbd: ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d new file mode 100644 index 0000000..85a2b61 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d @@ -0,0 +1,16 @@ +PLCMain.o: ../PLCMain.cpp /opt/codac-6.3/epics/include/epicsExit.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/iocsh.h diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o new file mode 100644 index 0000000..76fd7b1 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.cpp b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.cpp new file mode 100644 index 0000000..c40a5dc --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.cpp @@ -0,0 +1,469 @@ +/* THIS IS A GENERATED FILE. DO NOT EDIT! */ +/* Generated from ../O.Common/PLC.dbd */ + +#include +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_asynRSET, *pvar_rset_biRSET, *pvar_rset_boRSET, + *pvar_rset_calcRSET, *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_asynRecordSizeOffset, pvar_func_biRecordSizeOffset, + pvar_func_boRecordSizeOffset, pvar_func_calcRecordSizeOffset, + pvar_func_calcoutRecordSizeOffset, pvar_func_compressRecordSizeOffset, + pvar_func_dfanoutRecordSizeOffset, pvar_func_epidRecordSizeOffset, + pvar_func_eventRecordSizeOffset, pvar_func_fanoutRecordSizeOffset, + pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "asyn", "bi", "bo", "calc", + "calcout", "compress", "dfanout", "epid", "event", "fanout", + "histogram", "int64in", "int64out", "longin", "longout", "lsi", "lso", + "mbbi", "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", + "sel", "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_asynRSET, pvar_func_asynRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_asynAiInt32, + *pvar_dset_asynAiInt32Average, *pvar_dset_asynAiFloat64, + *pvar_dset_asynAiFloat64Average, *pvar_dset_asynAiInt64, + *pvar_dset_devAoSoft, *pvar_dset_devAoSoftRaw, + *pvar_dset_devAoSoftCallback, *pvar_dset_devAoStats, + *pvar_dset_asynAoInt32, *pvar_dset_asynAoFloat64, + *pvar_dset_asynAoInt64, *pvar_dset_asynRecordDevice, + *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_asynBiInt32, *pvar_dset_asynBiUInt32Digital, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_asynBoInt32, *pvar_dset_asynBoUInt32Digital, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_asynInt64In, *pvar_dset_devI64outSoft, + *pvar_dset_devI64outSoftCallback, *pvar_dset_asynInt64Out, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_asynLiInt32, + *pvar_dset_asynLiUInt32Digital, *pvar_dset_asynLiInt64, + *pvar_dset_devLoSoft, *pvar_dset_devLoSoftCallback, + *pvar_dset_asynLoInt32, *pvar_dset_asynLoUInt32Digital, + *pvar_dset_asynLoInt64, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_asynLsiOctetCmdResponse, *pvar_dset_asynLsiOctetWriteRead, + *pvar_dset_asynLsiOctetRead, *pvar_dset_devLsoSoft, + *pvar_dset_devLsoSoftCallback, *pvar_dset_devLsoStdio, + *pvar_dset_asynLsoOctetWrite, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_asynMbbiInt32, + *pvar_dset_asynMbbiUInt32Digital, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, + *pvar_dset_asynMbbiDirectUInt32Digital, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_asynMbboInt32, *pvar_dset_asynMbboUInt32Digital, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, + *pvar_dset_asynMbboDirectUInt32Digital, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_asynPfOctetWrite, *pvar_dset_devSiSoft, + *pvar_dset_devSiSoftCallback, *pvar_dset_devTimestampSI, + *pvar_dset_devSiGeneralTime, *pvar_dset_devSiEnviron, + *pvar_dset_devStringinStats, *pvar_dset_devStringinEnvVar, + *pvar_dset_devStringinEpics, *pvar_dset_devSysMonSiStats, + *pvar_dset_asynSiOctetCmdResponse, *pvar_dset_asynSiOctetWriteRead, + *pvar_dset_asynSiOctetRead, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_asynSoOctetWrite, *pvar_dset_devSASoft, + *pvar_dset_devWfSoft, *pvar_dset_devWaveformStats, + *pvar_dset_devSysMonWaveStats, *pvar_dset_asynWfOctetCmdResponse, + *pvar_dset_asynWfOctetWriteRead, *pvar_dset_asynWfOctetRead, + *pvar_dset_asynWfOctetWrite, *pvar_dset_asynWfOctetWriteBinary, + *pvar_dset_asynInt8ArrayWfIn, *pvar_dset_asynInt8ArrayWfOut, + *pvar_dset_asynInt16ArrayWfIn, *pvar_dset_asynInt16ArrayWfOut, + *pvar_dset_asynInt32ArrayWfIn, *pvar_dset_asynInt32ArrayWfOut, + *pvar_dset_asynInt32TimeSeries, *pvar_dset_asynFloat32ArrayWfIn, + *pvar_dset_asynFloat32ArrayWfOut, *pvar_dset_asynFloat64ArrayWfIn, + *pvar_dset_asynFloat64ArrayWfOut, *pvar_dset_asynFloat64TimeSeries, + *pvar_dset_asynInt64ArrayWfIn, *pvar_dset_asynInt64ArrayWfOut, + *pvar_dset_asynInt64TimeSeries; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "asynAiInt32", "asynAiInt32Average", + "asynAiFloat64", "asynAiFloat64Average", "asynAiInt64", "devAoSoft", + "devAoSoftRaw", "devAoSoftCallback", "devAoStats", "asynAoInt32", + "asynAoFloat64", "asynAoInt64", "asynRecordDevice", "devBiSoft", + "devBiSoftRaw", "devBiSoftCallback", "devBiDbState", "asynBiInt32", + "asynBiUInt32Digital", "devBoSoft", "devBoSoftRaw", + "devBoSoftCallback", "devBoGeneralTime", "devBoDbState", + "devBoSimulation", "asynBoInt32", "asynBoUInt32Digital", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "asynInt64In", "devI64outSoft", + "devI64outSoftCallback", "asynInt64Out", "devLiSoft", + "devLiSoftCallback", "devLiGeneralTime", "asynLiInt32", + "asynLiUInt32Digital", "asynLiInt64", "devLoSoft", + "devLoSoftCallback", "asynLoInt32", "asynLoUInt32Digital", + "asynLoInt64", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "asynLsiOctetCmdResponse", "asynLsiOctetWriteRead", + "asynLsiOctetRead", "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", + "asynLsoOctetWrite", "devMbbiSoft", "devMbbiSoftRaw", + "devMbbiSoftCallback", "devSysMonMbbiStats", "asynMbbiInt32", + "asynMbbiUInt32Digital", "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "asynMbbiDirectUInt32Digital", "devMbboSoft", "devMbboSoftRaw", + "devMbboSoftCallback", "asynMbboInt32", "asynMbboUInt32Digital", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "asynMbboDirectUInt32Digital", + "devPrintfSoft", "devPrintfSoftCallback", "devPrintfStdio", + "asynPfOctetWrite", "devSiSoft", "devSiSoftCallback", + "devTimestampSI", "devSiGeneralTime", "devSiEnviron", + "devStringinStats", "devStringinEnvVar", "devStringinEpics", + "devSysMonSiStats", "asynSiOctetCmdResponse", "asynSiOctetWriteRead", + "asynSiOctetRead", "devSoSoft", "devSoSoftCallback", "devSoStdio", + "asynSoOctetWrite", "devSASoft", "devWfSoft", "devWaveformStats", + "devSysMonWaveStats", "asynWfOctetCmdResponse", + "asynWfOctetWriteRead", "asynWfOctetRead", "asynWfOctetWrite", + "asynWfOctetWriteBinary", "asynInt8ArrayWfIn", "asynInt8ArrayWfOut", + "asynInt16ArrayWfIn", "asynInt16ArrayWfOut", "asynInt32ArrayWfIn", + "asynInt32ArrayWfOut", "asynInt32TimeSeries", "asynFloat32ArrayWfIn", + "asynFloat32ArrayWfOut", "asynFloat64ArrayWfIn", + "asynFloat64ArrayWfOut", "asynFloat64TimeSeries", + "asynInt64ArrayWfIn", "asynInt64ArrayWfOut", "asynInt64TimeSeries" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, + pvar_dset_asynAiInt32, pvar_dset_asynAiInt32Average, + pvar_dset_asynAiFloat64, pvar_dset_asynAiFloat64Average, + pvar_dset_asynAiInt64, pvar_dset_devAoSoft, pvar_dset_devAoSoftRaw, + pvar_dset_devAoSoftCallback, pvar_dset_devAoStats, + pvar_dset_asynAoInt32, pvar_dset_asynAoFloat64, pvar_dset_asynAoInt64, + pvar_dset_asynRecordDevice, pvar_dset_devBiSoft, + pvar_dset_devBiSoftRaw, pvar_dset_devBiSoftCallback, + pvar_dset_devBiDbState, pvar_dset_asynBiInt32, + pvar_dset_asynBiUInt32Digital, pvar_dset_devBoSoft, + pvar_dset_devBoSoftRaw, pvar_dset_devBoSoftCallback, + pvar_dset_devBoGeneralTime, pvar_dset_devBoDbState, + pvar_dset_devBoSimulation, pvar_dset_asynBoInt32, + pvar_dset_asynBoUInt32Digital, pvar_dset_devCalcoutSoft, + pvar_dset_devCalcoutSoftCallback, pvar_dset_devEpidSoft, + pvar_dset_devEpidSoftCB, pvar_dset_devEventSoft, + pvar_dset_devHistogramSoft, pvar_dset_devI64inSoft, + pvar_dset_devI64inSoftCallback, pvar_dset_asynInt64In, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_asynInt64Out, pvar_dset_devLiSoft, + pvar_dset_devLiSoftCallback, pvar_dset_devLiGeneralTime, + pvar_dset_asynLiInt32, pvar_dset_asynLiUInt32Digital, + pvar_dset_asynLiInt64, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_asynLoInt32, + pvar_dset_asynLoUInt32Digital, pvar_dset_asynLoInt64, + pvar_dset_devLsiSoft, pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, + pvar_dset_asynLsiOctetCmdResponse, pvar_dset_asynLsiOctetWriteRead, + pvar_dset_asynLsiOctetRead, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_asynLsoOctetWrite, pvar_dset_devMbbiSoft, + pvar_dset_devMbbiSoftRaw, pvar_dset_devMbbiSoftCallback, + pvar_dset_devSysMonMbbiStats, pvar_dset_asynMbbiInt32, + pvar_dset_asynMbbiUInt32Digital, pvar_dset_devMbbiDirectSoft, + pvar_dset_devMbbiDirectSoftRaw, pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, + pvar_dset_asynMbbiDirectUInt32Digital, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_asynMbboInt32, pvar_dset_asynMbboUInt32Digital, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, + pvar_dset_asynMbboDirectUInt32Digital, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_asynPfOctetWrite, pvar_dset_devSiSoft, + pvar_dset_devSiSoftCallback, pvar_dset_devTimestampSI, + pvar_dset_devSiGeneralTime, pvar_dset_devSiEnviron, + pvar_dset_devStringinStats, pvar_dset_devStringinEnvVar, + pvar_dset_devStringinEpics, pvar_dset_devSysMonSiStats, + pvar_dset_asynSiOctetCmdResponse, pvar_dset_asynSiOctetWriteRead, + pvar_dset_asynSiOctetRead, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_asynSoOctetWrite, pvar_dset_devSASoft, pvar_dset_devWfSoft, + pvar_dset_devWaveformStats, pvar_dset_devSysMonWaveStats, + pvar_dset_asynWfOctetCmdResponse, pvar_dset_asynWfOctetWriteRead, + pvar_dset_asynWfOctetRead, pvar_dset_asynWfOctetWrite, + pvar_dset_asynWfOctetWriteBinary, pvar_dset_asynInt8ArrayWfIn, + pvar_dset_asynInt8ArrayWfOut, pvar_dset_asynInt16ArrayWfIn, + pvar_dset_asynInt16ArrayWfOut, pvar_dset_asynInt32ArrayWfIn, + pvar_dset_asynInt32ArrayWfOut, pvar_dset_asynInt32TimeSeries, + pvar_dset_asynFloat32ArrayWfIn, pvar_dset_asynFloat32ArrayWfOut, + pvar_dset_asynFloat64ArrayWfIn, pvar_dset_asynFloat64ArrayWfOut, + pvar_dset_asynFloat64TimeSeries, pvar_dset_asynInt64ArrayWfIn, + pvar_dset_asynInt64ArrayWfOut, pvar_dset_asynInt64TimeSeries +}; + +epicsShareExtern drvet *pvar_drvet_drvAsyn; + +static const char *driverSupportNames[] = { + "drvAsyn"}; + +static struct drvet *drvsl[] = { + pvar_drvet_drvAsyn}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_asynInterposeDelayRegister, + pvar_func_asynInterposeEchoRegister, + pvar_func_asynInterposeEosRegister, + pvar_func_asynInterposeFlushRegister, pvar_func_asynRegister, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_drvAsynIPPortRegisterCommands, + pvar_func_drvAsynIPServerPortRegisterCommands, + pvar_func_drvAsynSerialPortRegisterCommands, + pvar_func_drvBlockTCPEventRegister, + pvar_func_drvBlockTCPRedundantPlcRegister, + pvar_func_drvBlockTCPRegister, pvar_func_drvCodacHeaderRegister, + pvar_func_drvCodacRedundantPlcRegister, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int PLC_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerDrivers(pbase, NELEMENTS(drvsl), driverSupportNames, drvsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_asynInterposeDelayRegister(); + pvar_func_asynInterposeEchoRegister(); + pvar_func_asynInterposeEosRegister(); + pvar_func_asynInterposeFlushRegister(); + pvar_func_asynRegister(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_drvAsynIPPortRegisterCommands(); + pvar_func_drvAsynIPServerPortRegisterCommands(); + pvar_func_drvAsynSerialPortRegisterCommands(); + pvar_func_drvBlockTCPEventRegister(); + pvar_func_drvBlockTCPRedundantPlcRegister(); + pvar_func_drvBlockTCPRegister(); + pvar_func_drvCodacHeaderRegister(); + pvar_func_drvCodacRedundantPlcRegister(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* PLC_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"PLC_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(PLC_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d new file mode 100644 index 0000000..c97df07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +PLC_registerRecordDeviceDriver.o: PLC_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o new file mode 100644 index 0000000..f21fa1c Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o differ diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB new file mode 100755 index 0000000..72c1b69 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB differ diff --git a/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/EC-GN b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/EC-GN new file mode 100755 index 0000000..888f6e1 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/EC-GN differ diff --git a/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC new file mode 100755 index 0000000..e8d546a Binary files /dev/null and b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC differ diff --git a/EC-GN-JA-PCF/target/main/epics/configure/CONFIG b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/target/main/epics/configure/Makefile b/EC-GN-JA-PCF/target/main/epics/configure/Makefile new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile new file mode 100644 index 0000000..a76e591 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RELEASE b/EC-GN-JA-PCF/target/main/epics/configure/RELEASE new file mode 100644 index 0000000..67df4c2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RELEASE @@ -0,0 +1,6 @@ + +# Maven ITER plugin generated RELEASE file contents: + +EPICS_BASE=/opt/codac-6.3/epics + +-include $(TOP)/configure/RELEASE.local diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES b/EC-GN-JA-PCF/target/main/epics/configure/RULES new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc b/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS b/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP b/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd new file mode 100644 index 0000000..c98cde5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd @@ -0,0 +1,18666 @@ +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(dbndInitialize) +registrar(iocSetLogSyslogRegister) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd new file mode 100755 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths new file mode 100644 index 0000000..0202169 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PCF0SYSM") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem new file mode 100755 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd new file mode 100755 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd new file mode 100755 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths new file mode 100644 index 0000000..bb3dfe0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PSH0CUB") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem new file mode 100755 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd new file mode 100755 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd new file mode 100755 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths new file mode 100644 index 0000000..8a3ebab --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PSH0PCF") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem new file mode 100755 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd new file mode 100755 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd new file mode 100755 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd new file mode 100755 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +7V1Zd+K4Ev41Oefeh/TxvjwSlpDbYRkgSfe8cBww4G5jM8ZkmV9/Je+WBMjGNg50P6RtYWup+lRVqirJN3xz/XHvaJtVz57r5g3HzD9u+NYNx0kcC/7Cgk+/QJAkv2DpGHO/iI0Lxsa/elDIBKU7Y65vUw+6tm26xiZdOLMtS5+5qTLNcez39GML20y3utGWOlYwnmkmXvpizN2VX6pwUlze1Y3lKmyZlVT/l1dt9nvp2DsraO+G4xfeP//ntRbWFQx0u9Lm9nuiiG/f8E3Htl3/av3R1E1I2pBs/nudPb9G/XZ0y6V5YbP6+/bVXm9s9y9xvdD+ni6Vx1tV9qt508xdQJAXzXDHrmbNXz+DjrufIbG84eqwQuaGv3tfGa4+3mgz+Os7QAcoW7lrE9yx4BLvYNDnN91x9Y9EUdDhe91e664DmmWCXzmV918JwRXQ8j3mFBvSd5XgUvicFoBjGdUcEwhcBDTKQi8Fo4k+B3gKbm3HXdlL29LMdlx6l6ZagkL6h+H+gMXfxODuZ+KX1kfwhnfzGdz80l33M5hG2s61QVHc6qNtb45Rf2vvnJlOgQlXc5a6S/EgpMBBbjq6qbnGW3rGFc4blgnxFYN5sFiYhqXXDsiccm4kswyHUatlbLVXE5Dl7ORiakctgSgoh7qzNtzz0wuTk+cnmIgRbOgAVQoEgbWsHcFE7vwEk4gIG+navH6KWDq7JmYZFaMXrputeQPaiOBuZmrbrTFDFLAFuuJrYFkM73+GahfexErYuwu1cKS5E3o7rGOv6q5AJUdS/ahOTjBOJPAtLKNW3UELQ9sAg4txo6QlOSsiePCHHryVtF6RipB6ZAmpx6cMVg/gvvaZeGwDH9ju7y/LIu2kbGpw4VcYwzai6AlIZnFNPHxsTsftx3ZzAsphESwN7ZsEwMH0ddOQ3rqO/Vtv2qbtgBLLtqAFujBMEynSTGNpwXkBwKiD8jsoDAywLmoEP6yN+dwzX0nSJS1/ChAwCH9pxTFXmnhh+SLFS0q2fONEWvESPBpKmJLESyQ1ijP5qxEvPIOIFzaneGEFBH9oRQXJFzHdjFiJeMEtsfxIZtNIpgZySk+WpSajFeDX05Mqgj9Uv9ECmRPZb2K6KpkOysXhDTdks+ONiBvuMHD2WnPsEZSegjjhiyIOtXQEFCbUolNCKkJ1ckmmmcBWIjxxB+kNJ5nQ6Jobb+ByCS97zeF42mhOpqO7pL3Gh4+CthNPEypo9FvUz3qNNZ9Go2lv0AeF2hpaZNbrduM9z0RFQQVQR2bvxqsTFt4fGVz85P7X4+4e6B6xoqN97nRB/YOnyaCPdJAthfpec712A5LkgXI4+yq/VGOeR8wclWDNizwu2lilPHOeweYxeY3FXC5bWIQtnCzgfKl4lYU7ca6eLTytt7s8tnD4bMlvwmUIbiUsuEzuuPwGXAbPGlsr+w1ZsEp5zTdk4SFRWm+FGVhcEX6WLwG1LKtToc5Yk/M6cRGsyUzVWMODeE1onT6Mp6Onfv+hf4/YjxesdXgxHdGJbLak1pGq1TpFOKq+iCgQqUWB9EcUlCEKinRS1Rxr9C4qsVZY49MYUficWENjh+gqs3Ss4T6k61vkoMw8/xpHKVACJOZ/iWkAdbMLo9BCFM7KG7VAVyElhffRxDKBZw73iyP3q1yfM0fKbMEckcNRezjtDVptRIKU4POE0mrYHvUe0GyEa3d0IrAlZpHxB+Zf8VItbC0HdjLw8w+aqliSCaQlWcVwwlOq7382pgA/3XZjMp089FDxcy3MEUlBjWrXyzyHMQdmjHafYZwN4UPVCaOSnM5CkFlKg6+8hFEe9zR2nxvOug75yCi5RFEO0zjOSDDcXeYRTJ83tp/WrHZEq0HWO4+7sLrPD9YvfeYatlUXsgkpstVgdwWPe2NGnUG/LvRKw4wlWXkV0wv3KHSfJ3AviqW559/txKJ5jnWQ/vhyvw2W9s75icWrKpKyJzL82clFtQZtWHAgY9cDHZWxXgPqctLZqStQrdJSO3G/CnVl5fzUxRctGKXK9e2nPPuJZNQSnPuB5jzu3A9XCzXxHaKBJBWBQ95AEgqrgjyH6PIvbKdcT6CAr/DyIznlo6ZNpc6Y738CkkN8fr09KClgKHkTcUSkIqEkJIvozEPPjTjyfCUucKGIzZ1EEX54D9W+8GyJOwiocR85MGoCfAQXCuroyivBq96vIpKMsQvFGk+NtXpFGi8Ga6WZpvXDGnXaCV+vtJOLwVqRxmPNsUadTsfXOp3u62KtyD3GGVPj8izVT8GaSo01pVZYYwUGddYI4SkHmTd98jzmtBSRukrHHGlr5oViTqHFXChQ6oI5EYWJKueEHIehV+WqRhwpZRBz294Nx9NRu9H6eVP6ZtTGwaauOJNGUlJIkRRCML3aTBqJtMok5kZhDN2b1Hep7BMFhH2kXBuWwL7ycm0k3MCB83z84u9pPzD3BiO8rNd9Bi/7iTqply+VozIvI8Kb5wlTMjyqpqIpSXW2A5ySe5h8LfNR5tO8I53+p1Y7Hak0cYM8ySrJcr2ja5t4ZIa3O+Rnv7k3u/t6NbuMrJgFiaAaSJq9vKMlFNzPApOXxnXIXWIZnv9Wu/QlBU8s3DN7Uf2aYQacPHv3tl1oS2RTgDBOoqRAJBz9i3cUL16bbGFZxI3Gc7RJuJEHsoTJQtqpSpwsnce8Oyqw6khGa6bJU5e++NNr8JxvLX5Sb4Kmm2dreh8PSm77YTx9mDzmazluhmob0b52rliGCZKCrrRos0k5dPtmgUKMaqk1ao/bkyJFB1H10b+Nz6GC7I9ihOr5OkOSqqf05rQOkgTtuXtTIKtO7A4ujs+HG4LM/mN3kmR2FEw7KrPL87EouI8F94Vd8I5PFT03hLC9TCnJ6/X99w/7+z/P7R9dcdnXh9Pb5WJ3i+cOBdvx6upqqHRDHpFkuGsGo1PeEPGxdJYwRBwGhRMJ1KWEiAmpfYdQVJMA8ZkTYDIfQs2gHw6SFQSkp6VDE1lGcpdVjOIsCWBUKD6EzSSG31dPzd1o9P2p9/z4Igxb2r30XjMMSyyCYS4fhlk2XZEsIxUVl99ApD4e4iS5YGmDGJThUeK7VxcfZVkG/W4DKxO9j6QQqVqA85GICNwCrB0i6AJq8Xk3+HH5V2DKolEzNvxI7zFksYxSErSO7C9mQgqC0n928Bu5dwEto/ukm6aYKG+WRqlCPBkqLCNeXKQ/tBwhRx2+RbeHFreowvOyYPR26OhDx8boUvWiSkFO2Ks0eEumV4mZ3nVbUhF2FRzEUE3sUQVxXPB5j2VUkS2pWC5WQasqtJ2ww6Uuqgifqbpg4+aCbWcVNW5kSrO5POOG+NWorEKywK1Xx7YznCIk6Q+gqNe+fRbgBD0ZJvfnI3nk42Qi5RnTWSUlmol55PxarF98FYK1tIOV63dmBfXXY2p2+oqqovnY2BeVqbHPCFhdlF9PzYG4301d1ExnKz++3LblvvHGqi1CYCTUkis21JLkw5Ti38PCTfTCSrdApd7aagIU7x3ck2FsfV0KY81bHVIh+vTfeOgX3ycLGNAg+Ot9NK7xNBnAqkYwMuzasKJvUEUfWqNt0LK4w4PFwjQsPfNgwu0lfs9gCfwGimd6gCkQjcvvYHKk3qdS/A/teUOLhrC/t1EB/Io9BLf2pi9sZw2puHDsNfhvtoXrZGBlwKaNBWxn/Dx9HDRaIblB6wcbSfN4CE/Bc+moUk2vWsZWezWBxUPVpz6kqr2hqxqsUrs6kAPwBFOaytvAqoJCBs5PxhvvbjP3Dm9j8GN9Ief9vWwd/6aRvPFwPxnd+592HLcnCfTjxd4E8N71YROSHFyC9jVPoHm8COgPKZ+B6ZCRlNM6E33j43RpqgbixfGmjrGGHh7mPxtzNgHX/4UDjiegN9UyYig+qJamI5OdAxuzrYCDwcoi6EPQK5/ms5W+TTw1bU3oJnSyiQZVEw3KJpBBR4fNZh14alF1oF/+c3nGnVjyHSEtfIq6CTDsUa+dFDQJcQxaCoQSbM9d+Y/AAxijyrMqklQSQS6cOwvbQoA+6vg4n9nrta9pxq2+Z2bNfnsD8jru6DMdGDHz7LQncTfsRmnsJTaQmb/o1KFoo1E1ho4hJjrS+Irm5WG+7RN5Gdn20P9fuzl5SOmIcqd/4qDlLKxcLFJkaKbp7k/5FKu3/imxDFyzZezsJtnXkjCddPpflymVjbVNhK/haAIu+4xPGB3edCHy/pycpld2TyFX/UFHTIvZkJ2FGBSGAUMDWZJgaaFas4OyNmwQlsD7jnfR6aQVN3Q6H+tCxol8JVBLHcpe+OokOL88s9RGaXqH3cX0b2DUD5CTJjYMBFBjobBAxBaAEi6K+JYY300A+fjWLbcvQGsDwb0wPdfjypjPAf5LiEnsO9044d2TSAdYsEoRge623mkI/7x2P5vfe389q4v2y2vvNtsHLwMKnxiPoHKtfoWQKhZjyhspwEOdZXlKiSDIFpeqEASHt9bXBAUssy8dI7vTXBUqwgExgZbAdkDicXBrO+7KXtqWZrbjUkRInumQyF+6636OjX9hN7UdUNRAoEe9fbQ92R/n3iC4OYrCQ8nGx2M8PlpxcFKjjla+H+om+ctDRe0QwTQggaRZdohw4VEQVeQzEcmGfxTsys51OpGlqpSWY2FItIRjncCtY8OkyVgSgmGtevZch0/8Hw== \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000..f899918 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000..68b2851 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py new file mode 100644 index 0000000..78526fd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + print 'Enter to continue test' + inpval = raw_input() + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 0', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc new file mode 100644 index 0000000..05b88d6 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py new file mode 100644 index 0000000..cf99a15 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py @@ -0,0 +1,28 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby +import test_setup_rup_confirm + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup_rup_confirm.test_setup() +#test_setup.test_setup() +#test_setup_hw.test_setup() + + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py new file mode 100644 index 0000000..ff47dc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc new file mode 100644 index 0000000..e99d4b3 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py new file mode 100644 index 0000000..190c39c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py @@ -0,0 +1,93 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #temporary commentout 2 lines + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + #res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) #PLC Interlock + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) #cRIO Interlock + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc new file mode 100644 index 0000000..67d714d Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000..b3a9917 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000..bc74300 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py new file mode 100644 index 0000000..6305e40 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '4. Set FHPS rampup parameter and start it.' + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + print 'Enter to continue test' + inpval = raw_input() + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc new file mode 100644 index 0000000..b19006e Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc differ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py new file mode 100644 index 0000000..ebf5a71 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_sync(): + """Test Sync Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + print '5. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '6. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '7. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '8. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print '9. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' + +def test_sync_prepro(): + """Test Sync PrePro Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '5. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '6. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '7. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '8. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '9. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '10.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '11. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc new file mode 100644 index 0000000..3637b06 Binary files /dev/null and b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a new file mode 100644 index 0000000..3c1ffd9 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.so new file mode 100755 index 0000000..aad00cd Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o new file mode 100644 index 0000000..3137fa3 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o new file mode 100644 index 0000000..313fa07 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so new file mode 120000 index 0000000..c40f2e3 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so @@ -0,0 +1 @@ +JAEPICSCA.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a new file mode 100644 index 0000000..9635a64 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o new file mode 100644 index 0000000..d8db3dc Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.so new file mode 100755 index 0000000..bb265f2 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so new file mode 120000 index 0000000..a157a2c --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so @@ -0,0 +1 @@ +NI6528.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a new file mode 100644 index 0000000..0282571 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.o new file mode 100644 index 0000000..c80ed6f Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so new file mode 100755 index 0000000..fe8475c Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/libRandomDataSource.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/libRandomDataSource.so new file mode 120000 index 0000000..c256f92 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/libRandomDataSource.so @@ -0,0 +1 @@ +RandomDataSource.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.a new file mode 100644 index 0000000..a36c979 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o new file mode 100644 index 0000000..21b3237 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so new file mode 100755 index 0000000..d1ff6f0 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so new file mode 120000 index 0000000..ea84286 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so @@ -0,0 +1 @@ +JABitReverseGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a new file mode 100644 index 0000000..7b32ef4 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.o new file mode 100644 index 0000000..bdf7861 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so new file mode 100755 index 0000000..0d3856c Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so new file mode 120000 index 0000000..6d5fd99 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so @@ -0,0 +1 @@ +JABitSumGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a new file mode 100644 index 0000000..46c76ab Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o new file mode 100644 index 0000000..887e1a9 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.so new file mode 100755 index 0000000..0987de8 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so new file mode 120000 index 0000000..82a275a --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so @@ -0,0 +1 @@ +JAConditionalSignalUpdateGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a new file mode 100644 index 0000000..58b88e0 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o new file mode 100644 index 0000000..a27cc78 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so new file mode 100755 index 0000000..7cb178b Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so new file mode 120000 index 0000000..e291b9f --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so @@ -0,0 +1 @@ +JAMessageGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a new file mode 100644 index 0000000..ca45dc6 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o new file mode 100644 index 0000000..2ee886b Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so new file mode 100755 index 0000000..00a9f3e Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so new file mode 120000 index 0000000..01081fc --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so @@ -0,0 +1 @@ +JAModeControlGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a new file mode 100644 index 0000000..091b1f3 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o new file mode 100644 index 0000000..2c4aa22 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so new file mode 100755 index 0000000..1ac0703 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so new file mode 120000 index 0000000..3a956a5 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so @@ -0,0 +1 @@ +JAPreProgrammedGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a new file mode 100644 index 0000000..0eb595e Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o new file mode 100644 index 0000000..9904d8a Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.so new file mode 100755 index 0000000..8ec3b52 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so new file mode 120000 index 0000000..c1be501 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so @@ -0,0 +1 @@ +JARTStateMachineGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a new file mode 100644 index 0000000..8eecf04 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o new file mode 100644 index 0000000..ef700a7 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so new file mode 100755 index 0000000..65e9bcc Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so new file mode 120000 index 0000000..1552254 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so @@ -0,0 +1 @@ +JARampupGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a new file mode 100644 index 0000000..4f70e8d Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.o new file mode 100644 index 0000000..462ad1d Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so new file mode 100755 index 0000000..e7b8eda Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/libJASDNRTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/libJASDNRTStateMachineGAM.so new file mode 120000 index 0000000..d93741c --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/libJASDNRTStateMachineGAM.so @@ -0,0 +1 @@ +JASDNRTStateMachineGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.a new file mode 100644 index 0000000..b9295d7 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o new file mode 100644 index 0000000..a647a56 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.so new file mode 100755 index 0000000..8a3acbd Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/libJASourceChoiseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/libJASourceChoiseGAM.so new file mode 120000 index 0000000..2e19456 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/libJASourceChoiseGAM.so @@ -0,0 +1 @@ +JASourceChoiseGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.a new file mode 100644 index 0000000..b102740 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o new file mode 100644 index 0000000..a9eec2a Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so new file mode 100755 index 0000000..7c1924c Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/libJATerminalInterfaceGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/libJATerminalInterfaceGAM.so new file mode 120000 index 0000000..8c6fefb --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/libJATerminalInterfaceGAM.so @@ -0,0 +1 @@ +JATerminalInterfaceGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.a new file mode 100644 index 0000000..1c037e9 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.o new file mode 100644 index 0000000..525d726 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so new file mode 100755 index 0000000..4a0c43b Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so new file mode 120000 index 0000000..560278b --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so @@ -0,0 +1 @@ +JATriangleWaveGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a new file mode 100644 index 0000000..8c5d152 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.o new file mode 100644 index 0000000..93f7960 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.o differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so new file mode 100755 index 0000000..61939ca Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so differ diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/libJAWFRecordGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/libJAWFRecordGAM.so new file mode 120000 index 0000000..c3111ec --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/libJAWFRecordGAM.so @@ -0,0 +1 @@ +JAWFRecordGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/Gyrotron01DAN.o b/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/Gyrotron01DAN.o new file mode 100644 index 0000000..42955ec Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/Gyrotron01DAN.o differ diff --git a/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/configure_sdn.o b/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/configure_sdn.o new file mode 100644 index 0000000..7cd43a7 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Gyrotron01DAN/configure_sdn.o differ diff --git a/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/Gyrotron02DAN.o b/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/Gyrotron02DAN.o new file mode 100644 index 0000000..b481f10 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/Gyrotron02DAN.o differ diff --git a/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/configure_sdn.o b/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/configure_sdn.o new file mode 100644 index 0000000..7cd43a7 Binary files /dev/null and b/EC-GN-JA-PCF/target/obj/Gyrotron02DAN/configure_sdn.o differ diff --git a/EC-GN-JA-PCF/unit.spec b/EC-GN-JA-PCF/unit.spec new file mode 100644 index 0000000..5293c3f --- /dev/null +++ b/EC-GN-JA-PCF/unit.spec @@ -0,0 +1,134 @@ +#+====================================================================== +# $HeadURL: $ +# $Id: $ +# +# Project : ITER I&C Integration +# +# Description : SPEC file for packaging CS-Studio related file artefacts +# +# Author(s) : Bertrand Bauvir (IO) +# +# Copyright (c) : 2010-2021 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +%define __spec_install_post %{nil} + +Name: iter-icint-%{project_artifactId} +Version: %{project_version} +Release: %{?rpm_release_num:%{rpm_release_num}}%{!?rpm_release_num:1} +Summary: %{project_description} + +Group: Development/CODAC +Distribution: I&C Applications +#URL: http://www.iter.org/org/team/chd/cid/codac +URL: %{?rpm_vcs_url:%{rpm_vcs_url}}%{!?rpm_vcs_url:undefined} +Vendor: ITER Organization +Packager: ITER Organization +License: ITER License + +Source0: src.tar.gz + +BuildArch: noarch +AutoReq: no + +%provides_self + +%description +%{project_description}. + +%package -n %subpackage opi +Summary: %{project_description} - OPI resources +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage opi + +%description -n %subpackage opi +%{project_description} - OPI resources. + +%package -n %subpackage alarm +Summary: %{project_description} - Alarm configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage alarm + +%description -n %subpackage alarm +%{project_description} - Alarm configuration. + +%package -n %subpackage archive +Summary: %{project_description} - Archive configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage archive + +%description -n %subpackage archive +%{project_description} - Archive configuration. + +%prep +%setup -T -c -a 0 + +%build + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId} +install -d %{buildroot}/opt/codac/opi/%{project_artifactId} +cp -r src/main/boy %{buildroot}/opt/codac/opi/%{project_artifactId} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId}/epics +cp -r src/main/epics/*App %{buildroot}/opt/codac/opi/%{project_artifactId}/epics || : +mkdir -p %{buildroot}/etc/opt/codac/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} + +%clean + +%files + +%files -n %subpackage opi +/opt/codac/opi/* + +%files -n %subpackage alarm +/etc/opt/codac/%{project_artifactId}/*beast.xml +/etc/opt/codac/css/beast/%{project_artifactId}/*beast.xml + +%files -n %subpackage archive +/etc/opt/codac/%{project_artifactId}/*beauty.xml +/etc/opt/codac/css/beauty/%{project_artifactId}/*beauty.xml + +%pretrans +%beginlog_pretrans +%endlog + +%posttrans +%beginlog_posttrans +%endlog + +%preun +%beginlog_preun +%endlog + +%postun +%beginlog_postun +%endlog + +%changelog +* Wed Mar 31 2021 Bertrand Bauvir +- Initial version. diff --git a/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec b/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec new file mode 100644 index 0000000..5293c3f --- /dev/null +++ b/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec @@ -0,0 +1,134 @@ +#+====================================================================== +# $HeadURL: $ +# $Id: $ +# +# Project : ITER I&C Integration +# +# Description : SPEC file for packaging CS-Studio related file artefacts +# +# Author(s) : Bertrand Bauvir (IO) +# +# Copyright (c) : 2010-2021 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +%define __spec_install_post %{nil} + +Name: iter-icint-%{project_artifactId} +Version: %{project_version} +Release: %{?rpm_release_num:%{rpm_release_num}}%{!?rpm_release_num:1} +Summary: %{project_description} + +Group: Development/CODAC +Distribution: I&C Applications +#URL: http://www.iter.org/org/team/chd/cid/codac +URL: %{?rpm_vcs_url:%{rpm_vcs_url}}%{!?rpm_vcs_url:undefined} +Vendor: ITER Organization +Packager: ITER Organization +License: ITER License + +Source0: src.tar.gz + +BuildArch: noarch +AutoReq: no + +%provides_self + +%description +%{project_description}. + +%package -n %subpackage opi +Summary: %{project_description} - OPI resources +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage opi + +%description -n %subpackage opi +%{project_description} - OPI resources. + +%package -n %subpackage alarm +Summary: %{project_description} - Alarm configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage alarm + +%description -n %subpackage alarm +%{project_description} - Alarm configuration. + +%package -n %subpackage archive +Summary: %{project_description} - Archive configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage archive + +%description -n %subpackage archive +%{project_description} - Archive configuration. + +%prep +%setup -T -c -a 0 + +%build + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId} +install -d %{buildroot}/opt/codac/opi/%{project_artifactId} +cp -r src/main/boy %{buildroot}/opt/codac/opi/%{project_artifactId} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId}/epics +cp -r src/main/epics/*App %{buildroot}/opt/codac/opi/%{project_artifactId}/epics || : +mkdir -p %{buildroot}/etc/opt/codac/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} + +%clean + +%files + +%files -n %subpackage opi +/opt/codac/opi/* + +%files -n %subpackage alarm +/etc/opt/codac/%{project_artifactId}/*beast.xml +/etc/opt/codac/css/beast/%{project_artifactId}/*beast.xml + +%files -n %subpackage archive +/etc/opt/codac/%{project_artifactId}/*beauty.xml +/etc/opt/codac/css/beauty/%{project_artifactId}/*beauty.xml + +%pretrans +%beginlog_pretrans +%endlog + +%posttrans +%beginlog_posttrans +%endlog + +%preun +%beginlog_preun +%endlog + +%postun +%beginlog_postun +%endlog + +%changelog +* Wed Mar 31 2021 Bertrand Bauvir +- Initial version. diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000..3e2e146 --- /dev/null +++ b/generate.sh @@ -0,0 +1,147 @@ +#!/bin/sh + +if [[ $# > 0 ]]; then + mask=$1 +fi + +cid=1 + +project_name=EC-GN-JA-PCF +mkdir ${project_name} + +current_dir=$(pwd) + +################################################################################################################ +#Section 1 +#Update SVN + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + if [[ ! -d ${project_name}/.svn ]]; then + rm -rf ${project_name} + svn co https://svnpub.iter.org/codac/iter/codac/icdev/units/m-${project_name}/trunk/ + mv trunk ${project_name} + fi + + cd ${project_name} + svn up + status=$? + while [[ ${status} != 0 ]]; do + svn cleanup + svn up + status=$? + done +fi +cid=$((cid+1)) + +cd ${current_dir} +################################################################################################################ +#Section 2 +#Get PLC data from SVN + +ok=$(echo ${mask} | cut -c ${cid}) + +#if [[ ${ok} != "0" ]]; then +# plc_proj_folder=src/main/resources/52HV05-PLC-7103 +# export_folder=${plc_proj_folder}/export +# if [[ -d ${project_name}/${export_folder} ]]; then +# rm -rf ${project_name}-IN/${export_folder} +# cp -rf ${project_name}/${export_folder} ${project_name}-IN/${export_folder} +# fi +#fi + +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 3 +#SDD(-cool) Generation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then +# cp -rf ${project_name}/src/main/resources tmp_resources + rm -rf ${project_name}/* + cp -rf ${project_name}-IN/* ${project_name}/ + cp -rf ${project_name}-IN/.[^.]* ${project_name}/ +# cp -rf tmp_resources/* ${project_name}/src/main/resources +# rm -rf tmp_resources + + cd ${project_name,,}-sdd-in/SDD_IN + ./sdd-generate.sh +fi +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 4 +#Post Patches + +ok=$(echo ${mask} | cut -c ${cid}) + +#if [[ ${ok} != "0" ]]; then +#fi + +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 5 +#ZIP generation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + cd ${current_dir} + dateId=$(date +'%Y-%m-%d_%H-%M-%S_%N') + zip -r ${project_name}-${dateId}.zip ${project_name} -x ${project_name}/.svn\* -x ${project_name}/src/main/boy/unified-control-lib\* + nKeep=3 + nBackups=$(ls -t ${project_name}-*.zip | wc -l) + if [[ ${nBackups} -gt ${nKeep} ]]; then + nRemovals=$(( ${nBackups} - ${nKeep} )) + toRemove=$(ls -t ${project_name}-*.zip | tail -n ${nRemovals}) + rm -f ${toRemove} + fi + +fi +cid=$((cid+1)) +cd ${current_dir} + +################################################################################################################ +#Section 6 +#SVN Sync +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + + cd ${project_name} + mvn clean + + svn st | grep ^? | awk '{print " --force "$2}' | xargs svn add + svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm + + svn ci -m "Generated on ${dateId}" + cd ${current_dir} + +fi +cid=$((cid+1)) + +cd ${current_dir} + + +################################################################################################################ +#Section 7 +#Project Compilation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + cd ${project_name} + mvn clean package -O -Drelease=final + cd ${current_dir} + cp -rf ${project_name}/target/* target/ +fi